webForumDet fria alternativet

Vända data

Databaser & SQL

2 svar · 440 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Hejsan,

Som en förlängning, eller rättare sagt en variant på http://www.webforum.nu/showthread.php?t=174965

Jag vill nu kunna få detta data:
ID, Q1, Q2, Q3
1, 5, 3, 5
2, 4, 1, 3
3, 5, 2, 3

... att se ut såhär:
ID, Column, Value
1, Q1, 5
1, Q2, 3
1, Q3, 5
2, Q1, 4
2, Q2, 1
2, Q3, 3
3, Q1, 5
3, Q2, 2
3, Q3, 3

Hur gör jag detta lättast i SQL-server 2005?

Medlem sedan aug. 20039 340 inlägg
#2

Ett sätt är att trixa lite med unions. Visserligen blir kolumnnamnet hårdkodade i frågan, men de lär ju inte ändras stup i kvarten ändå.

(SELECT id AS id, 'Q1' AS columnname, Q1 AS value FROM tabellnamn WHERE ...)
UNION ALL
(SELECT id AS id, 'Q2' AS columnname, Q2 AS value FROM tabellnamn WHERE ...)
UNION ALL
(SELECT id AS id, 'Q3' AS columnname, Q3 AS value FROM tabellnamn WHERE ...)

Edit, ändrade column till columnname för att undvika eventuella krockar med reserverade keywords.

Medlem sedan dec. 19998 577 inlägg
#3

Tackar nitro2k01!

Hittade ett annat sätt också:

select ID, Column, Value from
(select ID, Q1, Q2, Q3 from p_Data) as t
unpivot (Value for Column in(Q1, Q2, Q3)) as unpvt
267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)