2016-10-16 10 views
-2

Ich brauche deine Hilfe für diese Abfrage:Microsoft SQL Query Rückkehr wiederholt Zeilen in einer Reihe

SELECT   
    'ABBOTT' AS Customername, 'DaleelMAMA' AS AccountName, 
    dbo.AccountBase.Name AS FullName, 
    dbo.AccountBase.Telephone1 AS MobilePhone, 
    dbo.AccountBase.new_HomePhone1 AS HomePhone, 
    dbo.new_otherparentinformationBase.new_MobilePhone AS ParentPhone, 
    dbo.AccountBase.new_preferredlanguagetext AS Language 
FROM    
    dbo.AccountBase 
LEFT OUTER JOIN 
    dbo.new_otherparentinformationBase ON dbo.AccountBase.AccountId = 
     dbo.new_otherparentinformationBase.new_MotherName_lookup 

Diese Abfrage dieses Ergebnis zurückgibt:

Das ursprüngliche Ergebnis

ABBOTT DaleelMAMA Eman 55555555 NULL 56545412 Arabic 
ABBOTT DaleelMAMA Eman 55555555 NULL 22222222 Arabic 
ABBOTT DaleelMAMA Eman 55555555 NULL 25456552 Arabic 
ABBOTT DaleelMAMA Hala 55552504 22252128 NULL Arabic 

aber Ich muss meine Abfrage aktualisieren, um dieses Ergebnis zurückzugeben, aber wie unten sehen Sie, dass Eman Zeile drei Mal wiederholt wird, und dies, weil es andere übergeordnete Telefonnummern enthält, so muss ich dieses Ergebnis in einer Zeile machen Geben Sie die Nummer der Mutter und die zugehörigen Telefonnummern der Eltern an.

gewünschtes Ergebnis

required result

bitte Link oben für gewünschtes Ergebnis sehen, die über sie zielen darauf suchen, Dank für Ihre Unterstützung im Voraus.

ganz Lösung Blick

whole solution look

+0

Ob ein Benutzer mehr als 4 Telefonnummern haben kann? –

Antwort

0

Wenn es immer 4 ParentPhone pro Name dann versuchen, so etwas wie dieser

;with cte as 
(
SELECT   
    'ABBOTT' AS Customername, 
    'DaleelMAMA' AS AccountName, 
    ROW_NUMBER() over(partition by dbo.AccountBase.Name order by dbo.AccountBase.Telephone1) as rn, 
    dbo.AccountBase.Name AS FullName, 
    dbo.AccountBase.Telephone1 AS MobilePhone, 
    dbo.AccountBase.new_HomePhone1 AS HomePhone, 
    dbo.new_otherparentinformationBase.new_MobilePhone AS ParentPhone, 
    dbo.AccountBase.new_preferredlanguagetext AS Language 
FROM    
    dbo.AccountBase 
LEFT OUTER JOIN 
    dbo.new_otherparentinformationBase ON dbo.AccountBase.AccountId = dbo.new_otherparentinformationBase.new_MotherName_lookup 
    ) 
SELECT Customername, 
     AccountName, 
     FullName, 
     MobilePhone, 
     Max(CASE WHEN rn = 1 THEN ParentPhone END) AS ParentPhone1, 
     Max(CASE WHEN rn = 2 THEN ParentPhone END) AS ParentPhone2, 
     Max(CASE WHEN rn = 3 THEN ParentPhone END) AS ParentPhone3, 
     Max(CASE WHEN rn = 4 THEN ParentPhone END) AS ParentPhone4, 
     Language 
FROM cte 
GROUP BY Customername, 
      AccountName, 
      FullName, 
      MobilePhone, 
      Language 

Hinweis: Wenn die Anzahl der ParentPhone pro Name unbekannt ist, dann müssen Sie Verwenden von dynamischem Pivot Beginnen Sie auch mit Aliasnamen, um die Abfrage lesbarer zu machen

+0

Lieber Prdp, eigentlich ist die Nummer von ParentPhone pro Name unbekannt, und ich bin kein Experte in fortgeschrittenen Microsoft Queriern, also kannst du mir helfen, es zu sortieren –

+0

Jetzt funktioniert es gut danke, aber ich kann es nicht speichern, h habe dies Nachricht immer: Warnung: Die ORDER BY-Klausel wird nur zum Bestimmen der Zeilen verwendet, die von der TOP-Klausel in der Sichtdefinition zurückgegeben werden. Die ORDER BY-Klausel garantiert keine geordneten Ergebnisse, wenn die Ansicht abgefragt wird, es sei denn, ORDER BY wird auch in der Abfrage selbst angegeben. –

+0

Wie kann ich dies in meiner Ansicht speichern, als ich suchte, dass ich diese Reihenfolge von nicht in der Ansicht gespeichert, so wie ich Abfrage ähnlich wie Ihre Abfrage und gespeichert unter Ansicht. –

Verwandte Themen