我目前正在處理一組通過SSRS傳遞給我的查詢的值。在這種情況下,這是一個不確定的年份。例如,這些值可能是'2014','2015'和'2016',或者它可能只是'2016'任何此類變化。沒有表的PIVOT?
我想做一些類似於PIVOT的事情,我可以在單個列中創建一個所有年份的表格,以便我可以與每個月的另一個表格進行交叉連接以獲得年/月份列表。
任何想法如何開始呢?
我目前正在處理一組通過SSRS傳遞給我的查詢的值。在這種情況下,這是一個不確定的年份。例如,這些值可能是'2014','2015'和'2016',或者它可能只是'2016'任何此類變化。沒有表的PIVOT?
我想做一些類似於PIVOT的事情,我可以在單個列中創建一個所有年份的表格,以便我可以與每個月的另一個表格進行交叉連接以獲得年/月份列表。
任何想法如何開始呢?
我仍然在尋找如何處理這種情況,但我最終將腳本轉換爲存儲過程,然後將參數作爲參數傳遞給存儲過程。這導致參數作爲單個字符串傳遞,然後我可以像Nolan Shang建議的那樣分割它。
我認爲你需要一個分割字符串的功能。 例如:
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
不幸的是,(可能是SSRS版本的差異)這個變量沒有以我能做到的方式出現。 根據SQL Server Profiler,數據更像:'2014','2015','2016',而不是單個字符串。 –