sql - 如何在 SQL 中创建动态数据透视查询
解决方案
这可以通过重复列名来完成,但是,我无法想象为什么要这样做。
@Col 是我们应用别名的地方...[#] as [Tier Value]...
例子
Declare @Col varchar(max) = Stuff((Select Distinct ',' + concat(QuoteName(row_number() over (Partition By ContractID Order by TierDesc)),' as [Tier Value]') From Yourtable Order by 1 For XML Path('')),1,1,'')
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(row_number() over (Partition By ContractID Order by TierDesc)) From Yourtable Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select ContractID,'+@Col+'
From (
Select ContractID
,TierDesc
,ColNr = row_number() over (Partition By ContractID Order by TierDesc)
From YourTable
) Src
Pivot (max(TierDesc) for ColNr in ('+@SQL+') ) pvt
'
Exec(@SQL)
退货
ContractID Tier Value Tier Value Tier Value
123 tier1 tier2 NULL
555 tier4 tier5 tier6
652 tier0 tier4 NULL
编辑 - 然后生成的 SQL 看起来像这样
Select ContractID
,[1] as [Tier Value]
,[2] as [Tier Value]
,[3] as [Tier Value]
From (
Select ContractID
,TierDesc
,ColNr = row_number() over (Partition By ContractID Order by TierDesc)
From YourTable
) Src
Pivot (max(TierDesc) for ColNr in ([1],[2],[3]) ) pvt
编辑 2
Select Distinct
ColNr = row_number() over (partition by ContractID Order By TierDesc)
From Yourtable
推荐阅读
- python-3.x - 一种找到复杂算法时间复杂度的策略证明方法?
- javascript - easy-Autocomplete 实现问题:javascript 未执行且 JSON 未处理
- c# - Random() 创建相同的随机字母和数字
- python - 如何将信息从 Python 代码传递到 Web 信息显示?
- ios - 如何通过 iOS 中的键盘扩展更改文本字段中的字体输出
- c - 计算字符串中的一个字符 (C) - 问题
- vue.js - 用于 nuxt.js 构建的自定义 index.html
- javascript - useState 更新状态子数组对象不起作用
- android - 为什么网络蓝牙配对屏幕显示同一设备的多个条目?
- reactjs - 如何知道 React Bootstrap 模式何时加载?