Мне нужно знать, может ли "pivot" в MS SQL использоваться для преобразования строк в столбцы, если нет функции агрегата, которая будет использоваться. Я видел множество примеров только с агрегатной функцией. мои поля являются строковыми типами данных, и мне нужно преобразовать данные этой строки в данные столбца. Вот почему я написал этот вопрос. Я просто сделал это с "случаем". Может кто-нибудь мне помочь...... Спасибо заранее.
Преобразование строк в столбцы с использованием "Pivot" в mssql, когда столбцы представляют собой строковый тип данных
Ответ 1
Вы можете использовать PIVOT для выполнения этой операции. При выполнении PIVOT вы можете сделать это одним из двух способов: с помощью Static Pivot вы будете кодировать строки для преобразования или Dynamic Pivot, которые будут создавать список столбцов во время выполнения:
Static Pivot (см. SQL Fiddle with Demo):
SELECT *
FROM
(
select empid, wagecode, amount
from t1
) x
pivot
(
sum(amount)
for wagecode in ([basic], [TA], [DA])
) p
Динамический поворот:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(wagecode)
FROM t1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT empid, ' + @cols + ' from
(
select empid, wagecode, amount
from t1
) x
pivot
(
sum(amount)
for wagecode in (' + @cols + ')
) p '
execute(@query)
Оба из них дадут вам те же результаты
Ответ 2
примерный формат
empid wagecode составляют
1 basic 1000
1 ТА 500
1 500
2 1500
2 ; 750
2 DA 750
EmpID basic TA DA
1 500 500
2 1500 750 750
ОТВЕТ, КОТОРЫЙ Я ПОЛУЧИЛ
SELECT empID , [1bas] as basic, [1tasal] as TA,[1otsal] as DA FROM ( SELECT empID, wage, amount FROM table) up PIVOT (SUM(amt) FOR wgcod IN ([1bas], [1tasal],[1otsal])) AS pvt ORDER BY empID GO
Ответ 3
Попробуйте следующее:
SELECT empid AS EmpID
, ISNULL(SUM(CASE wagecode WHEN 'basic' THEN Amount ELSE 0 END), 0) AS Basic
, ISNULL(SUM(CASE wagecode WHEN 'ta' THEN Amount ELSE 0 END), 0) AS TA
, ISNULL(SUM(CASE wagecode WHEN 'da' THEN Amount ELSE 0 END), 0) AS DA
FROM Employee
GROUP BY empid