/ / Dotaz s riadkami do stĺpcov - sql, sql-server, sql-server-2008, pivot

Dotaz s riadkami do stĺpcov - sql, sql-server, sql-server-2008, pivot

Mám údaje v 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

Ale potrebujem ako nižšie

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

odpovede:

0 pre odpoveď č. 1

Môžeš použiť GROUP BY s podmienenou agregáciou pomocou CASE ako toto.

Vzorové dáta

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);

Dopyt

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

Výkon

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

editovať Ak máte neznáme číslo dátumu, použite ho dynamic pivot ako toto.

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 pre odpoveď č. 2

použitie 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

VÝKON:

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

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


0 pre odpoveď č. 3

USE PIVOT

Použitie konceptu pivotu prevádza hodnoty riadkov ako záhlavie stĺpcov

PIVOT je jedným z nových relačných operátorov zavedených v Sql Server 2005. Poskytuje jednoduchý mechanizmus v Sql Serveri na transformáciu riadkov na stĺpce.

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