2017-02-06 3 views
0

В настоящее время я работаю с набором значений, переданных в запрос SSRS. В этом случае это неопределенное число года. Например, значения могут быть «2014», «2015» и «2016», или это может быть «2016» любого такого варианта.PIVOT без стола?

Я хотел бы сделать что-то вроде 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' 

Я не уверен, что тип данных вами параметров. Если переменная имеет столбцы таблицы, вы можете использовать cross apply. Если они несколько переменных, вы можете просто использовать выбрать из значений

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», а не как одна строка. –

Смежные вопросы