Questo tipo di trasformazione dei dati è conosciuto come un PIVOT
. A partire da SQL Server 2005, esiste una funzione che può trasporre i dati in colonne per te.
Se si dispone di un numero noto di Site
valori che si desidera trasformare in colonne, allora si può codificare la query:
select part_number, [Site 1], [Site 2]
from
(
select part_number, cost, site
from yourtable
) src
pivot
(
sum(cost)
for site in ([Site 1], [Site 2])
) piv;
Vedi SQL Fiddle with Demo
Ma se si dispone di un numero sconosciuto di valori, allora si avrà bisogno di utilizzare SQL dinamico per generare l'elenco delle colonne da utilizzare nella query:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(site)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT part_number,' + @cols + '
from
(
select part_number, cost, site
from yourtable
) x
pivot
(
sum(cost)
for site in (' + @cols + ')
) p '
execute(@query)
See 01.238.896,860982 millions. Entrambi dare il risultato:
| PART_NUMBER | SITE 1 | SITE 2 |
---------------------------------
| 1 | 2.4 | 68.8 |
È necessario trovare le domande sul TAB CROSS. – Prasanna