2016-06-30 1 views
0

Meine Tabellenstruktur wieSQL Pivot für mehrere Spalten in einer Zeile

---------------------------------------------- 
AccountNo | Ben1 | Ben2 | Ben3 | Ben4 | Type | 
---------------------------------------------- 
A1234  | xyz1 | xyz2 | xyz3 | xyz4 | P | 
A1005  | pqr1 | pqr2 | pqr3 | pqr4 | C | 
---------------------------------------------- 

Ich brauche obigen Tabelle zu

------------------------- 
AccountNo | Name | Type | 
------------------------- 
A1234  |xyz1 | P | 
A1234  |xyz2 | P | 
A1234  |xyz3 | P | 
A1234  |xyz4 | P | 
A1005  |pqr1 | C | 
A1005  |pqr2 | C | 
A1005  |pqr3 | C | 
A1005  |pqr4 | C | 
------------------------- 

durch eine SQL-Abfrage zu schwenken, wie ich oben Ergebnis

erhalten schwenken
+3

haben Sie versucht, die Suche, es ist eine Pracht ty allgemeine Frage: http://stackoverflow.com/search?q=%5Bsql-server%5D+pivot+columns+rows – Tanner

+0

Auch ich habe eine Ben1Type, Ben2Type, Ben3Type und Ben4TYpe Spalte entsprechend. –

+0

Ich habe Antwort von der URL: http://mangalpardeshi.blogspot.in/2009/04/unpivot-multiple-columns.html –

Antwort

3
SELECT AccountNo, Name, Type 
FROM 
(
    SELECT AccountNo, Ben1, Ben2, Ben3, Ben4, Type 
    FROM yourTable 
) AS t1 
UNPIVOT 
(
    Name FOR Names IN (Ben1, Ben2, Ben3, Ben4) 
) AS t2 

SQL Server UNPIVOT

Update:

Sie können nicht direkt Entpivotisierung NULL Werte, da diese Datensätze aus der Ergebnismenge entfernt werden. Eine Option wäre, die NULLVARCHAR Spalten durch den Text 'NULL' zu ersetzen. Auf diese Weise können Sie alle ursprünglichen Informationen behalten und gleichzeitig sehen, was ursprünglich NULL war.

SELECT AccountNo, Name, Type 
FROM 
(
    SELECT AccountNo, 
      COALESCE(Ben1, 'NULL'), 
      COALESCE(Ben2, 'NULL'), 
      COALESCE(Ben3, 'NULL'), 
      COALESCE(Ben4, 'NULL'), 
      Type 
    FROM yourTable 
) AS t1 
UNPIVOT 
(
    Name FOR Names IN (Ben1, Ben2, Ben3, Ben4) 
) AS t2 
+0

Manchmal Ben2, Ben3, Ben4 wird null sein. –

+0

Auch ich habe eine Ben1Type, Ben2Type, Ben3Type und Ben4TYpe Spalte entsprechend. –

+0

@ellickakudyrajeesh Ich habe meine Antwort mit einer möglichen Problemumgehung aktualisiert (obwohl es viele gibt). –

0

Dies kann mit UNPIVOT

CREATE TABLE #TestTb(AccountNo VARCHAR(5),Ben1 VARCHAR(5), Ben2 VARCHAR(5), Ben3 VARCHAR(5), Ben4 VARCHAR(5), Type CHAR(1)); 

INSERT INTO #TestTb(AccountNo,Ben1,Ben2,Ben3,Ben4,Type) 
VALUES ('A1234','xyz1','xyz2','xyz3','xyz4','P'), 
    ('A1005','pqr1','pqr2','pqr3','pqr4','C'); 

SELECT AccountNo, 
     Name, 
     Type 
FROM (
     SELECT AccountNo,Ben1,Ben2,Ben3,Ben4,Type 
     FROM #TestTb 
    ) AS Src 
    UNPIVOT (
     Name FOR AccName IN(Ben1,Ben2,Ben3,Ben4) 
    ) AS UNPVT; 
0

Ein anderer Weg, um alle

SELECT AccountNo, Ben1 as Name, [Type] 
FROM YourTable 
UNION ALL 
SELECT AccountNo, Ben2, [Type] 
FROM YourTable 
UNION ALL 
SELECT AccountNo, Ben3, [Type] 
FROM YourTable 
UNION ALL 
SELECT AccountNo, Ben4, [Type] 
FROM YourTable 
ORDER BY AccountNo, Name 

Output zu verwenden UNION ist geschehen:

AccountNo Name Type 
A1005  pqr1 C 
A1005  pqr2 C 
A1005  pqr3 C 
A1005  pqr4 C 
A1234  xyz1 P 
A1234  xyz2 P 
A1234  xyz3 P 
A1234  xyz4 P