Ten rodzaj transformacji danych jest znany jako PIVOT
. Począwszy od SQL Server 2005, istnieje funkcja, która może przetransponować dane do kolumn.
Jeśli masz znaną liczbę Site
wartości, które chcesz włączyć do kolumn, możesz ciężko Kod zapytania:
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;
Zobacz SQL Fiddle with Demo
Ale jeśli masz nieznaną liczbę wartości, a następnie trzeba będzie użyć dynamicznego SQL, aby wygenerować listę kolumn mają być stosowane w zapytaniu:
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 SQL Fiddle with Demo. Zarówno dadzą wynik:
| PART_NUMBER | SITE 1 | SITE 2 |
---------------------------------
| 1 | 2.4 | 68.8 |
Będziesz musiał znaleźć informacje o zapytaniach CROSS TAB. – Prasanna