我目前正在使用SSRS传递给我的查询的一组值。在这种情况下,它是一个不确定的年份。例如,值可能是“2014年”,“2015年”,“2016年”和“2016年”等。或者它可能只是' 2016'任何这样的变化。
我想做像PIVOT这样的事情,我可以在一个列中创建一个包含所有年份的表格,以便我可以与每个月的另一个表格交叉加入以获得年/月列表。
知道我是如何开始的吗?
答案 0 :(得分:1)
我认为你需要一个分裂字符串的功能。 例如:
<强> 1.String 强>
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
yr ----------- '2015' '2016' '2017'
我不确定你参数的数据类型。 如果变量来自表的列,则可以使用交叉应用。 如果它们是多个变量,您可以使用select from values
<强> 2.Variables 强>
DECLARE @var1 VARCHAR(10)='2015', @var2 VARCHAR(10)='2016', @var3 VARCHAR(10)='2017'
SELECT * FROM (VALUES(@var1),(@var2),(@var3)) t(yr)
第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
答案 1 :(得分:0)
我仍然在研究如何处理这种情况,但我最终将我的脚本转换为存储过程,然后将参数作为参数传递给存储过程。这导致参数作为单个字符串传递,然后我可以像Nolan Shang所建议的那样将其拆分。