gpt4 book ai didi

SQL查询行需要动态转换为列

转载 作者:行者123 更新时间:2023-12-04 19:09:44 25 4
gpt4 key购买 nike

请帮我解决以下问题 -我的表中有以下数据-

Agent   Variable    Chandigarh      NewDelhi
ABC Leads 102.00 10
ABC TotalTime 10.52 1
ABC RPH 22.79 22
ABC TotalRev 239.70 23
XYZ Leads 14.00 14
XYZ TotalTime 1.52 1
XYZ RPH 21.64 21
XYZ TotalRev 32.90 32

我想要这样的解决方案

Agent   Chandigarh_Leads    Chandigarh_TotalTime    Chandigarh_RPH  Chandigarh_RPH_TotalRev     NewDelhi_Leads  .......

ABC 102.00 10.52 22.79 239.70 10 .......
XYZ 14 1.52 21.64 32.90 14 ............

仅供引用,我可以在列中有更多状态,它没有限制,可以是 10 或 20 或 5 等。所以我需要结果动态查询。请帮助我,是否可以不用静态查询?

最佳答案

动态 SQL + 旋转:

DECLARE @sql nvarchar(max),
@columns nvarchar(max),
@col_to_cast nvarchar(max),
@col_unpvt nvarchar(max)

--This will give:
--,[Chandigarh_Leads],[Chandigarh_RPH]....[NewDelhi_TotalRev],[NewDelhi_TotalTime]

SELECT @columns = COALESCE(@columns,'')+',['+name+'_'+Variable +']'
FROM (
SELECT DISTINCT Variable
FROM #yourtable) v
CROSS JOIN (
SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID(N'#yourtable')
AND name not in ('Agent', 'Variable')
) c
ORDER BY c.name, v.Variable

--As columns while unpivoting must be same type we need to cast them in same datattype:
--This will give
--,CAST([Chandigarh] as float) as [Chandigarh],CAST([NewDelhi] as float) as [NewDelhi]

SELECT @col_to_cast = COALESCE(@col_to_cast,'')+',CAST(' + QUOTENAME(name)+ ' as float) as '+ QUOTENAME(name)
@col_unpvt = COALESCE(@col_unpvt,'') + ','+ QUOTENAME(name)
FROM sys.columns
WHERE object_id = OBJECT_ID(N'#yourtable')
AND name not in ('Agent', 'Variable')

SELECT @sql = N'
SELECT *
FROM (
SELECT Agent,
[Columns]+''_''+Variable as ColName,
[Values] as ColVal
FROM (
SELECT Agent,
Variable'+@col_to_cast+'
FROM #yourtable
) p
UNPIVOT (
[Values] FOR [Columns] IN ('+STUFF(@col_unpvt,1,1,'')+')
) unpvt
) t
PIVOT (
MAX(ColVal) FOR ColName IN ('+STUFF(@columns,1,1,'')+')
) pvt'

EXEC sp_executesql @sql

输出:

Agent   Chandigarh_Leads    Chandigarh_RPH  Chandigarh_TotalRev Chandigarh_TotalTime    NewDelhi_Leads  NewDelhi_RPH    NewDelhi_TotalRev   NewDelhi_TotalTime
ABC 102 22,79 239,7 10,52 10 22 23 1
XYZ 14 21,64 32,9 1,52 14 21 32 1

关于SQL查询行需要动态转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39180016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com