/ / Abfrage mit Zeilen in Spalten - SQL, SQL-Server, SQL-Server-2008, Pivot

Abfrage mit Zeilen in Spalten - sql, sql-server, sql-server-2008, Pivot

Ich habe Daten in tbl1:

item    date    amount
a   1   10
a   2   20
a   3   30
a   4   40
b   1   20
b   2   30
b   3   40
b   4   50
c   1   30
c   2   40
c   3   50
c   4   60

Aber ich brauche wie unten

item    1   2   3   4
a   10  20  30  40
b   20  30  40  50
c   30  40  50  60

Antworten:

0 für die Antwort № 1

Sie können verwenden GROUP BY mit bedingter Aggregation mit CASE so was.

Beispieldaten

DECLARE @tbl1 TABLE (item CHAR(1),date int, amount int)
INSERT INTO @tbl1 VALUES
("a",   1,   10),
("a",   2,   20),
("a",   3,   30),
("a",   4,   40),
("b",   1,   20),
("b",   2,   30),
("b",   3,   40),
("b",   4,   50),
("c",   1,   30),
("c",   2,   40),
("c",   3,   50),
("c",   4,   60);

Abfrage

SELECT
item,
MAX(CASE WHEN date = 1 then amount END) as d1,
MAX(CASE WHEN date = 2 then amount END) as d2,
MAX(CASE WHEN date = 3 then amount END) as d3,
MAX(CASE WHEN date = 4 then amount END) as d4
FROM @tbl1
GROUP BY item

Ausgabe

item    d1  d2  d3  d4
a   10  20  30  40
b   20  30  40  50
c   30  40  50  60

Bearbeiten Wenn Sie eine unbekannte Datumsnummer haben, verwenden Sie dynamic pivot so was.

DECLARE @s NVARCHAR(MAX)

SELECT @s  = STUFF((SELECT DISTINCT "," + quotename(CONVERT(VARCHAR(10),date),"[")
FROM #tbl1 for xml path("")),1,1,"")

SET @s = N"SELECT item," + @s + " FROM #tbl1 PIVOT(MAX(amount) FOR date in(" + @s + ")) as pvt"
print @s
EXEC sp_executeSQL @s

2 für die Antwort № 2

Benutzen PIVOT

SELECT item, [1], [2], [3], [4]
FROM tbl1 t
PIVOT (SUM(amount) FOR date IN ([1], [2], [3], [4])) p
SELECT item, [10], [20], [30], [40], [50], [60]
FROM tbl1 t
PIVOT (MAX(date) FOR amount IN ([10], [20], [30], [40], [50], [60])) p

AUSGABE:

item    1   2   3   4
a       10  20  30  40
b       20  30  40  50
c       30  40  50  60

SQL-Geige: http://sqlfiddle.com/#!3/f097d/12/0


0 für die Antwort № 3

BENUTZEN PIVOT

Verwenden Sie das Pivot-Konzept, um Zeilenwerte als Spaltenkopf zu konvertieren

PIVOT ist einer der neuen relationalen Operatoren, der in SQL Server 2005 eingeführt wurde. Er bietet einen einfachen Mechanismus in SQL Server, um Zeilen in Spalten umzuwandeln.

select * from tbl1 pivot(sum(amount) for [date] in([1],[2],[3],[4])) as a