当列为字符串数据类型时,在mssql中使用“Pivot”将行转换为列
我需要知道,如果没有要使用的聚合函数,MS SQL中的“pivot”是否可以用于将行转换为列。我看到很多只使用聚合函数的示例。我的字段是字符串数据类型,我需要将行数据转换为列数据。这就是我写这个问题的原因。我只是用“case”来做。有人能帮我吗……提前谢谢 样本格式 empid代码金额 1基本1000 1 TA 500 1 DA 500 2基础1500 2 TA 750 2 DA 750 empid基本TA DA 1 1000 500 500 215050750 我得到的答案是 试试这个:当列为字符串数据类型时,在mssql中使用“Pivot”将行转换为列,sql,sql-server,pivot,Sql,Sql Server,Pivot,我需要知道,如果没有要使用的聚合函数,MS SQL中的“pivot”是否可以用于将行转换为列。我看到很多只使用聚合函数的示例。我的字段是字符串数据类型,我需要将行数据转换为列数据。这就是我写这个问题的原因。我只是用“case”来做。有人能帮我吗……提前谢谢 样本格式 empid代码金额 1基本1000 1 TA 500 1 DA 500 2基础1500 2 TA 750 2 DA 750 empid基本TA DA 1 1000 500 500 215050750 我得到的答案
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
您可以使用来执行此操作。执行透视时,可以使用以下两种方法之一进行操作:使用静态透视对要转换的行进行编码,或使用动态透视在运行时创建列列表:
静态轴请参见:
动态轴:
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)
这两种方法都会得到相同的结果您可以在varchar上始终使用min或max。pivot网格中每个位置只能有一个值。感谢您的响应。。看,我的问题是,假设有一个员工,他有很多行数据。我需要选择此数据作为单行。所以问题是我不能使用最小值或最大值…。如果您提供示例数据和该数据的一些期望结果,那么我们可能会看到您正在尝试做什么,以及为什么最小值/最大值不适用于您。好的。我会给您数据格式。empid wagecode金额1基本1000 1 TA 500 1 DA 500 2基本1500 2 TA 750 2 DA 750,我需要ans作为empid基本TA DA 1 1000 500 2 1500 750@V.P Verma:谢谢您的重播。我选择pivote的原因是为了降低查询的复杂性和减少执行时间。我不知道确切的原因,但我认为pivote在这种情况下比case更好。再次感谢您的重播。我想知道pivote或case更快。顺便说一句,您可以在这里看到动态查询:我只需要调整查询终止符,以便声明段没有与您的其他部分分开执行code@JakeFeasel谢谢你的补充,我没有时间做这两个小提琴morning@bluefeet当然,没问题。“查询终止器UI控件非常新,不确定您是否知道它/它何时可能有用。@JakeFeasel它非常有用,我不知道添加了它。
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)