2016-09-29 6 views
1

Ich habe eine Ausgabe, die wie folgt aussieht:SQL Server: wie Zeilen drehen in Spalten

colA | colB | Value 
A | a | 46 
A | b | 8979 
A | C | 684168468 
B | a | 68546841 
B | b | 456846 
B | c | 468468 
C | a | 684684 
. | . | . 
. | . | . 

Die Liste geht weiter und weiter. Colb wiederholt eine Sequenz von a, b, c, und es könnte doppelte Werte geben, aber ich denke, es spielt keine Rolle, da es unterschiedliche Werte für colB haben wird.

Ich mag es wie diese

col A | a  | b  | c 
A  | 46  | 8979 | 684168468 
B  | 68546841 | 456846 | 468468 
C  | 684684 

aussieht Ich weiß, dass ich es mit Pivot-Tabelle tun, aber ich mag es in SQL Server tun, weil ich so viele Zeilen habe. Kann mir jemand sagen, wie das geht?

+1

Werfen Sie einen Blick auf [Pivot] (https: //technet.mic rosoft.com/nl-nl/library/ms177410(v=sql.105).aspx) – NickyvV

+0

das ist einfach zu verstehen, kurz und süß: http://www.codeproject.com/Tips/500811/Simple-Way- To-Use-Pivot-In-SQL-Abfrage – montewhizdoh

Antwort

3

Einfache PIVOT:

SELECT * 
FROM YourTable 
PIVOT (SUM(Value) FOR colB IN (a,b,c)) P 

Beispiel

WITH Src AS 
(
    SELECT * FROM (VALUES 
    ('A', 'a', 46  ), 
    ('A', 'b', 8979 ), 
    ('A', 'C', 684168468), 
    ('B', 'a', 68546841), 
    ('B', 'b', 456846 ), 
    ('B', 'c', 468468 ), 
    ('C', 'a', 684684 )) T(colA, colB, Value) 
) 
SELECT * 
FROM Src 
PIVOT 
(SUM(Value) FOR colB IN (a,b,c)) P 

Ergebnis:

colA a   b   c 
---- ----------- ----------- ----------- 
A 46   8979  684168468 
B 68546841 456846  468468 
C 684684  NULL  NULL 
+0

Vielen Dank. – Nayana

+0

Ich habe eine Frage, was passiert, wenn ich die Werte in colB nicht kenne. Es gibt so viele. Ich kann sie nicht alle angeben. und einige von ihnen haben keine Werte. – Nayana

0

Es ist ein Dies dauert Aufgabe Sie lso möglich durch die Verwendung dynamic SQL pivot query Pawel-Lösung zu verbessern, wie

folgt die Spaltenliste von möglichen Datenwerten aus der zweiten Spalte ist

DECLARE @values varchar(max) 
SELECT @values = 
STUFF(
(
    select distinct ',[' + col2 + ']' 
    from tblData 
    for xml path('') 
), 
1,1,'') 

DECLARE @SQL nvarchar(max) 
SELECT @SQL = N' 
select 
* 
from tblData 
PIVOT (
sum(val) 
FOR col2 
IN (
    ' + @values + ' 
) 
) PivotTable 
' 
--print @SQL 
exec sp_executesql @SQL 

Output zu erzeugen, wie in unten Screenshot zu sehen enter image description here

Für Datenprobe:

create table tblData (col1 varchar(5),col2 varchar(5),val bigint) 
insert into tblData values 
    ('A', 'a', 46  ), 
    ('A', 'b', 8979 ), 
    ('A', 'C', 684168468), 
    ('B', 'a', 68546841), 
    ('B', 'b', 456846 ), 
    ('B', 'c', 468468 ), 
    ('C', 'a', 684684 ) 
Verwandte Themen