2017-02-02 5 views
0

Ich habe die folgende Ansicht in SQL Server 2012; Der Screenshot zeigt, wie ein einzelner Kunde mehrere Telefone und Kontonummern, was zu mehreren ReihenVerschieben von Rollen in einer einzigen Zeile in SQL Server, die die korrekten Ergebnisse nicht zurückgeben

enter image description here

SELECT   
    dbo.CustomerModels.CustomerID, dbo.CustomerModels.FirstName,  
    dbo.CustomerModels.Gender, dbo.CustomerModels.AccountsCount, 
    dbo.CustomerModels.PhoneNumbersCount, 
    dbo.CustomerAccountModels.CustomAccountFieldValue, 
    dbo.CustomerPhoneNumberModels.CustomPhoneFieldValue, 
    dbo.AgencyModels.AgencyName, dbo.AgencyModels.AgencyCode 
FROM 
    dbo.CustomerModels 
INNER JOIN 
    dbo.CustomerAccountModels ON dbo.CustomerModels.CustomerID = dbo.CustomerAccountModels.CustomerID 
INNER JOIN 
    dbo.CustomerPhoneNumberModels ON dbo.CustomerModels.CustomerID = dbo.CustomerPhoneNumberModels.CustomerID 
INNER JOIN 
    dbo.AgencyModels ON dbo.CustomerModels.AgencyID = dbo.AgencyModels.AgencyID 

Jetzt möchte ich zeigen die Ergebnisse hat, so dass sie in der Abbildung unten statt der früheren Screenshot gezeigt.

Nach der Umsetzung werden die Ergebnisse zeigt Ordnung in einer Säulenform, aber dann anstelle der verschiedenen Kontonummern und Telefonnummern unter eigenen Spalte ist es die gleichen Zahlen unter verschiedenen Spalte

enter image description here

The unten zeigt meinen Code zum Transponieren der Abfrage

select 
    --CustomerID, 
    max([FirstName]) as [Full Name], 
    max([GenderSex]) AS [Sex], 
    max([AccountsCount]) as [No. Of Accounts], 
    --max([PhoneNumbersCount]) as [Total Fone No], 
    max([CustomAccountFieldValue]) as [Account 1], 
    --max([CustomAccountFieldValue]) as [Account 2], 
    --max([CustomAccountFieldValue]) as [Account 3], 
    --max([CustomAccountFieldValue]) as [Account 4], 
    --max([CustomAccountFieldValue]) as [Account 5], 
    max([CustomPhoneFieldValue]) as [Phone No 1], 
    max([CustomPhoneFieldValue]) as [Phone No. 2], 
    max([CustomPhoneFieldValue]) as [Phone No. 3], 
    max([CustomPhoneFieldValue]) as [Phone No. 4], 
    max([CustomPhoneFieldValue]) as [Phone No. 5], 
    max([AgencyName]) as [Agency], 
    max([AgencyCode]) as [Agency Code] 
    -- and so on for the remaining columns... 
from 
    (select 
     CustomerID, FirstName, Gender, 
     (CASE WHEN Gender = 0 THEN 'Female' WHEN Gender = 1 THEN 'Male' ELSE 'Other' END) As [GenderSex], 
     AccountsCount, PhoneNumbersCount, 
     CustomAccountFieldValue, 
     CustomPhoneFieldValue, AgencyName, AgencyCode 
     , t = concat('CustomAccountFieldValue ',row_number() over (partition by CustomerID order by CustomerID)) 
     , c = concat('CustomPhoneFieldValue ',row_number() over (partition by CustomerID order by CustomerID)) 
    from SMSAlerts.dbo.ViewAllCustomers 
    ) src 
pivot (count(CustomerID) for t in ([Account 1],[Account 2],[Account 3], [Account 4], [Account 5]))pt 
pivot (max(PhoneNumbersCount) for c in ([Phone No. 1],[Phone No. 2],[Phone No. 3],[Phone No. 4],[Phone No. 5]))pc 
group by FirstName; 

Bitte helfen Sie auf diese Richtung. Vielen Dank im Voraus

+0

noch für Ihre Antworten warten, bitte Mitglieder –

Antwort

0

Nachdem ich mehrere Stunden ohne die übliche prompte Antwort von Mitgliedern gewartet hatte, machte ich auch eine ernsthafte Forschung, um die gewünschten Ergebnisse zu erreichen. Anmutig war ich in der Lage, einige Tutorials von Rolling up multiple roles into a single row in SQL data zu durchlaufen, um meine gewünschten Ergebnisse zu erzielen.

SELECT 

CustomerID, Vorname, Agency, Geschlecht = (CASE Geschlecht, wenn 0 THEN 'weiblich' WHEN 1 THEN 'Male' ELSE 'Other'END), STUFF ((SELECT', '+ tblAccount .CustomAccountFieldValue FROM CustomerAccountModels AS tblAccount WHERE tblAccount.CustomerID = tblCustomer.CustomerID FOR XML PATH ('')), 1, 1, '') [Account Nos],

STUFF((SELECT ', ' + tblPhone.CustomPhoneFieldValue 
FROM CustomerPhoneNumberModels AS tblPhone 
WHERE tblPhone.CustomerID = tblCustomer.CustomerID 
FOR XML PATH('')), 1, 1, '') [Phone Nos] 

FROM CustomerModels AS tblCustomer INNER JOIN AgencyModels AS tblAgency ON tblCustomer.AgencyID = tblAgency.AgencyID GROUP BY tblCustomer.CustomerID, tblCustomer.FirstName, tblCustomer.Gender, tblAgency.AgencyName

The desired result I wanted

+0

Dank Allmächtiger Gott für die Weisheit –

Verwandte Themen