2016-05-05 9 views
0

ich folgende Daten in SQL haben (nvarchar- nvarchar)SQL mehrere Zeilen mit derselben Zeile Namen Spalte

Name: Test Person 
Phone Number: 290831283 
Fax Number: 192389182 
Email Address: [email protected] 
Name: Abacus Testing 
Phone Number: 901823908 
Fax Number: 9213989182 
Email Address: [email protected] 

Wie kann ich diese Daten formatiert sein:

[Name] [Phone Number] [Fax Number] [Email Address] 
Test Person 290831283 192389182 [email protected] 
Abacus Testing 901823908 9213989182 [email protected] 

Also im Grunde Einstellung die Zeilen in passende Spalte

Ich hatte gehofft, eine Pivot-Tabelle zu verwenden, aber ich bekomme nur die erste Zeile aufgrund der Aggregation.

SELECT [Name], [Phone Number], [Fax Number], [Email Address] 
FROM 
(
    SELECT 
      ColumnName, 
      Data 
    FROM 
      TheData 
) SRC 
PIVOT 
(
    MAX(Data) 
    FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address]) 
) PIV 

Ich würde keine CURSOR-Methoden, keine Alternativen bevorzugen?

  • Edit: hat weitere Felder für die Verwendung

Die anderen Felder Label-ID für jeden Eintrag zur Verfügung stehen. d. h. Name = 1, Telefonnummer = 2, Faxnummer = 3, Emailadresse = 4

Die gemeinsame ID für jeden der 4 Einträge ist ebenfalls verfügbar. d. h. die ersten 4 Einträge haben die ID 1001, die zweiten 4 Einträge die ID 1002

+0

Das Problem ist Ihr Datenmodell. Es scheint keine Spalte zu geben, in der die ersten vier Zeilen zur selben Entität gehören und die zweite zu einer anderen Entität. Sie * können sich nicht auf irgendeine Reihenfolge verlassen, in der sie gerade zurückgegeben werden. –

+0

zeigen Sie, wie die Daten in Ihrer Tabelle aussehen. kein Text. –

+1

Wenn Sie über ein Feld verfügen, das die Reihenfolge Ihrer Daten angibt, können Sie basierend darauf eine gemeinsame Nummer für Zeilen in jeder der Gruppen abrufen und diese im Pivot verwenden. –

Antwort

1

Nach der Erläuterung in den Kommentaren müssen Sie lediglich CommonId in Ihre Quelle einfügen.

Dies ist keine aggregierte oder sich ausbreitende Spalte, daher wird sie als Gruppierungsspalte verwendet und Sie erhalten eine Zeile für jeden eindeutigen Wert davon.

SELECT [Name], [Phone Number], [Fax Number], [Email Address] 
FROM 
(
    SELECT 
      CommonId, 
      ColumnName, 
      Data 
    FROM 
      TheData 
) SRC 
PIVOT 
(
    MAX(Data) 
    FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address]) 
) PIV 
+0

Perfekt, das war einfach. Ich verstehe jetzt, was du mit distinct row meinst. – fes

Verwandte Themen