Sql server 没有桌子的枢轴?
我目前正在处理一组由SSRS传递到查询中的值。在这种情况下,这是一个不确定的年份数。例如,该值可能是“2014”、“2015”和“2016”,也可能只是“2016”或任何此类变化 我想做一些类似PIVOT的事情,在这里我可以创建一个表,在一列中包含所有年份,这样我就可以交叉连接每个月的另一个表,以获得一个年/月列表Sql server 没有桌子的枢轴?,sql-server,reporting-services,Sql Server,Reporting Services,我目前正在处理一组由SSRS传递到查询中的值。在这种情况下,这是一个不确定的年份数。例如,该值可能是“2014”、“2015”和“2016”,也可能只是“2016”或任何此类变化 我想做一些类似PIVOT的事情,在这里我可以创建一个表,在一列中包含所有年份,这样我就可以交叉连接每个月的另一个表,以获得一个年/月列表 你知道我该怎么开始吗?我想你需要一个拆分字符串的函数。 例如: 1.字符串 DECLARE @para VARCHAR(max) SET @para='''2015'',''2016
你知道我该怎么开始吗?我想你需要一个拆分字符串的函数。 例如: 1.字符串
DECLARE @para VARCHAR(max)
SET @para='''2015'',''2016'',''2017'''
SELECT n.yr FROM (VALUES(CONVERT(XML,'<n>'+REPLACE(@para,',','</n><n>')+'</n>'))) x(doc)
CROSS APPLY(SELECT s.b.value('.','varchar(10)') AS yr FROM x.doc.nodes('n')s(b)) n
3。列
WITH paras(var1,var2,var3,var4)AS(
SELECT '2015','2016','2016',null
)
SELECT t.yr FROM paras
CROSS APPLY(VALUES(var1),(var2),(var3),(var4))t(yr)
WHERE t.yr IS NOT NULL
我仍在研究如何处理这种情况,但最终我将脚本转换为存储过程,然后将参数作为参数传递给存储过程。这导致参数以单个字符串的形式传递,然后我可以像Nolan Shang建议的那样拆分它。不幸的是,(可能与SSRS版本不同)变量不是以我可以做到的方式来传递的。根据SQL Server Profiler,数据更像是:“2014”、“2015”、“2016”,而不是单个字符串。
DECLARE @var1 VARCHAR(10)='2015', @var2 VARCHAR(10)='2016', @var3 VARCHAR(10)='2017'
SELECT * FROM (VALUES(@var1),(@var2),(@var3)) t(yr)
WITH paras(var1,var2,var3,var4)AS(
SELECT '2015','2016','2016',null
)
SELECT t.yr FROM paras
CROSS APPLY(VALUES(var1),(var2),(var3),(var4))t(yr)
WHERE t.yr IS NOT NULL