如果没有要使用的聚合函数,我需要知道是否可以使用 MS SQL 中的“枢轴”将行转换为列。我看到很多只有聚合函数的例子。我的字段是字符串数据类型,我需要将此行数据转换为列数据。这就是我写这个问题的原因。我只是用“案例”做的。任何人都可以帮助我......提前谢谢。
问问题
32032 次
3 回答
15
您可以使用PIVOT来执行此操作。在执行 PIVOT 时,您可以通过以下两种方式之一进行操作,使用静态 Pivot 对要转换的行进行编码,或者使用 Dynamic Pivot 将在运行时创建列列表:
静态数据透视(参见SQL Fiddle with a 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)
这两个都会给你相同的结果
于 2012-06-11T11:58:00.677 回答
1
样本格式
empid 工资代码金额
1 基本 1000
1 TA 500
1 DA 500
2 基本 1500
2 TA 750
2 DA 750
empid 基本 TA DA
1 1000 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
于 2012-06-11T11:37:32.447 回答
0
试试这个:
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
于 2012-06-11T11:52:50.043 回答