2017-02-06 20 views
0

我目前正在處理一組通過SSRS傳遞給我的查詢的值。在這種情況下,這是一個不確定的年份。例如,這些值可能是'2014','2015'和'2016',或者它可能只是'2016'任何此類變化。沒有表的PIVOT?

我想做一些類似於PIVOT的事情,我可以在單個列中創建一個所有年份的表格,以便我可以與每個月的另一個表格進行交叉連接以獲得年/月份列表。

任何想法如何開始呢?

回答

0

我仍然在尋找如何處理這種情況,但我最終將腳本轉換爲存儲過程,然後將參數作爲參數傳遞給存儲過程。這導致參數作爲單個字符串傳遞,然後我可以像Nolan Shang建議的那樣分割它。

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從值

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 
+0

不幸的是,(可能是SSRS版本的差異)這個變量沒有以我能做到的方式出現。 根據SQL Server Profiler,數據更像:'2014','2015','2016',而不是單個字符串。 –