[英]Dynamic pivot columns without dynamic SQL statement?
我只是想知道是否有任何方法可以使用動態列名進行數據透視查詢,而無需使用動態sql( declare @sql_text varchar(max) = 'select ...'
等)
動態SQL只是以錯誤的方式打磨我。
基本上我有這樣的查詢(我必須更改所有的表/列名稱以保護IP,所以如果有某種語法錯誤,請不要擔心它)
declare @sec_class_ids table (CLASS_ID varchar(50));
insert @sec_class_ids (CLASS_ID) values
('987987987'), -- END USER - SAVE AND EXPORT [987987987]
('654654654'), -- END USER - SAVE [654654654]
('321321321') -- 'END USER - SPECIAL - SAVE AND EXPORT [321321321]'
select * from (
select
class.NAME as sec_class_name,
sec_attr.NAME as sec_attr,
'YES' as granted
from sec_class class
inner join class_sec_attr
on class.class_id = class_sec_attr.class_id
inner join sec_attr
on sec_attr.sec_attr_id = class_sec_attr.sec_attr_id
inner join @sec_class_ids input
on input.class_id = class.class_id
) as sec_attrs
pivot (
max(sec_attrs.granted)
--for sec_attrs.sec_class_id in (@sec_class_ids)
for sec_points.sec_class_name in ([END USER - SAVE AND EXPORT],[END USER - SAVE],[END USER - SPECIAL - SAVE AND EXPORT])
) as sec_class_comparison
;
我希望能夠使用表var (顯示在注釋中)而不是手動設置每個查詢的列。 我知道這對於動態SQL來說是可行且非常簡單的,但是如果可能的話,我想避免這樣做。
不幸的是,如果沒有動態SQL,就無法做到這一點。 PIVOT要求在執行查詢時知道值,因此如果您具有未知名稱,則必須使用動態SQL。
我從未聽說過使用查詢執行此操作的方法,但我記得我能夠在報告(SSRS)中進行設置,這非常簡潔。 根據您計划對數據執行的操作,這可能對您有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.