我正在PIVOT
创建一个表,以便最终表中的列名基于源表中的“组织名称”。问题是,“组织名称”是数据驱动的,可以是任何一组值;我使用动态 SQL 来构建PIVOT
'IN
子句。这意味着该值可以匹配我拥有的另一个列名,就像RecordId
我正在旋转的那样。所以我有这样的事情:
.----------------------------------------------------------------------.
| RecordId | OrganizationFoo | OrganizationBar | OrganizationBaz | ... |
|----------|-----------------|-----------------|-----------------|-----|
| 123 | 182 | 76 | 56 | ... |
| 234 | 846 | 0 | 182 | ... |
| 345 | 46 | 2 | 951 | ... |
...
问题是,这都是数据驱动的,所以组织名称可以是RecordId
,这会导致由于重复列而生成无效的 SQL 查询。有没有办法可以自动为PIVOT
输出中的每一列添加前缀?
如果没有,我能想到的唯一三种方法是:
- 而是选择
CONCAT('Prefix_', [OrgName])
,但这可能会降低效率,因为[OrgName]
是索引的。 - 为持有者创建一个重复表
[OrgName]
,每次运行此查询时,清除它并插入原始表的内容,但使用[OrgName]
前缀代替。 - 总是
[OrgName]
首先存储前缀。
任何更清洁/更好的选择?
索引的使用似乎与串联无关。
其他 2 个解决方案很尴尬。
演示