【发布时间】:2018-01-03 13:58:14
【问题描述】:
正如问题所说,我正在尝试使用 Pivot 将一些值从动态 sql 查询插入到 TempTable,所以我不知道 ExistingCoulmnName
在下一步中,我想执行一些算术运算,比如说对这些列值进行乘法运算。
我该怎么做?
附上一些样本:
select @cols = STUFF((SELECT ',' + QUOTENAME(FYYear)
from #TempCapEx
group by FYYear
order by FYYear
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT CapitalExpenditureId,' + @cols + ' into
##GlobalTempForCapExPivotResult from
(
select CapitalExpenditureId, FYYear, indicatorvalue
from #TempCapEx
) x
pivot
(
sum(indicatorvalue)
for FYYear in (' + @cols + ')
) p'
execute (@query ) ;
所以我有一个##GlobalTempForCapExPivotResult:
CapitalExpenditureId 2016-2017 2017-2018 2018-2019 2019-2020 2020-2021 2021-2022 2022-2023
22150 0.0000 35200.0000 35200.0000 35200.0000 35200.0000 35200.0000 NULL
32632 NULL 213695.0000 224379.0000 235599.0000 247379.0000 259748.0000 0.0000
1589 10252.0000 170370.0000 0.0000 0.0000 0.0000 0.0000 NULL
14988 0.0000 133000.0000 0.0000 0.0000 0.0000 0.0000 NULL
36877 NULL 303.0300 404.040 101.010 0.0000 0.0000 0.0000
所以财政年度列可能会增加或减少,所以我该怎么做这样的事情:
Select [ExistingCoulmnName] * 3.5 from #GlobalTempForCapExPivotResult where [ExistingCoulmnName] = '[2016-2017]'
预期输出:
CapitalExpenditureId 2016-2017 2017-2018 2018-2019 2019-2020 2020-2021 2021-2022 2022-2023
22150 0.00 * 3.5 35200.0000 * 3.5 35200.0000 * 3.5 35200.0000 * 3.5 35200.0000 * 3.5 35200.0000 * 3.5 NULL * 3.5
【问题讨论】:
-
您只想要那一列,还是现有列,再加上一列新列?您希望将该列添加到临时表中,还是在创建临时表后作为单独的查询?我还假设您正在传递一个值为
'2016-2017'的参数/变量? (显示您想要的确切输出。) -
@MatBailie 你只是想要那一列,还是现有列,再加上一列新列?
Existing Columns您希望将该列添加到临时表中,还是在创建临时表后作为单独的查询?Separate Query我还假设您正在传递一个值为“2016-2017”的参数/变量?Yes -
请不要只在 cmets 中回复,更新您的问题以向所有读者阐明场景。 (不是每个人都会读完所有的cmets。) 请同时给出一个完整的例子;您已经给出了示例输入数据,请给出示例预期结果。
标签: sql-server pivot dynamic-sql dynamic-columns