【发布时间】:2015-04-30 09:16:50
【问题描述】:
我有可以正常工作的数据透视解决方案,但 SQL Server 不允许我保存它,因为它包含查询。这是我的原始表格:
ApplicationID ApplicationName ContactType Email
1 App1 type1 myemail@gmail.com
1 App1 type2 someemail@yahoo.com
2 App2 type1 email@email.com
2 App2 type3 someemail@yahoo.com
3 App3 type2 me@yahoo.com
想要的表:
ApplicationID ApplicationName Type1 Type2 Type3
1 App1 myemail@gmail.com
1 App1 someemail@yahoo.com
2 App2 email@email.com
& 等等....但是我想要动态旋转的含义,如果稍后添加了新的contactType,它就会被添加到视图中。这是我无法保存为视图的查询:
DECLARE @cols AS NVARCHAR(MAX),
@colsNull AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(contactType)
from ApplicationContact
group by contactType
order by contactType
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @colsNull = STUFF((SELECT ', coalesce(' + QUOTENAME(contactType)+', '''') as '+QUOTENAME(contactType)
from ApplicationContact
group by contactType
order by contactType
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT ApplicationID, ApplicationName, ' + @colsNull + '
from
(
select ApplicationID, ApplicationName, contactType, Email flag
from ApplicationContact
) x
pivot
(
max(flag)
for contactType in (' + @cols + ')
) p '
execute(@query)
我的错误是:关键字“DECLARE”附近的语法不正确 请帮忙。谢谢
【问题讨论】:
-
如果视图无法实现,我倾向于将其用作存储过程。视图是首选。查询在存储过程中工作得很好
-
您为什么要考虑使用视图?我认为最好的方法是 storeprocedure
-
我想将 SQL Server 数据库连接到其他 ERP 和报告系统,它最适合视图
-
也许投票反对的人愿意解释一下?
-
我也不确定是否会被否决
标签: sql sql-server sql-server-2012 pivot