PIVOT没有桌子?

时间:2017-02-06 04:22:30

标签: sql-server reporting-services

我目前正在使用SSRS传递给我的查询的一组值。在这种情况下,它是一个不确定的年份。例如,值可能是“2014年”,“2015年”,“2016年”和“2016年”等。或者它可能只是' 2016'任何这样的变化。

我想做像PIVOT这样的事情,我可以在一个列中创建一个包含所有年份的表格,以便我可以与每个月的另一个表格交叉加入以获得年/月列表。

知道我是如何开始的吗?

2 个答案:

答案 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所建议的那样将其拆分。