sqlpivot:我可以在不使用存储过程的情况下使pivot列表成为动态的吗?

ubbxdtey  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(300)

以下是我的sql,其中包含一个数据透视:

select * from (
    select 
        [event_id]
        ,[attnum]
        ,PollId
        ,PollResponseDisplayText
    from 
        [dbo].[v_PollReportDetails2]
) as tmp
pivot (max(tmp.[PollResponseDisplayText])
for tmp.PollId in ([703],[805],[806],[807],[808],[809])) as pivot_table

我想将数据透视表更改为以下内容:

for tmp.PollId in (select PollId 
                    from Polls 
                    where event_id = 100100
                    and isVisible = 1)) as pivot_table

我可以在一个存储过程中完成这一切,并动态地生成一个sql语句以提供给 execute() 声明,但我需要从一个Angular 来做这件事。

ogsagwnx

ogsagwnx1#

也许我找错地方了,但我似乎找不到官方文件,实际上说这是做不到的。但经过数小时的实验和讨论,显然,这不能这样做。
@风神在评论中说得最好,
pivot子句的语法要求在查询设计时知道这些不同的值。所以你不能把它用在视图中
从逻辑上讲,这是有意义的,因为随着时间的推移,当我们向表中添加行时,它可能会动态地向视图结果中添加列。
感谢@damien\u the\u异教徒的进一步澄清,请参见此处:
https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15#syntax

相关问题