簡體   English   中英

動態透視列沒有動態SQL語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM