Можете ли вы создавать переменные на основе условий в SQL-сервере?
например, я передам строку типа '2016,2017'
Мой запрос создаст 2 переменные, потому что он имеет 2 года
сейчас, если я пройду 10 лет в строке, например, '2010,2011,...'
Мой запрос тоже должен создать 10 переменных ...
Это вообще возможно?
EDIT:
ПСЕВДОКОД
declare @string as nvarchar(max) = '2014,2015,2016'
declare @count as int = (select LEN(REPLACE(@string, ',', '**')) - LEN(@string) )
while @count <> 0
begin
--create variable statement here
Declare @var + @count as nvarchar(max)
set @string = (select substring(@string,0,CHARINDEX(',', @string)))
set @var +@count = @string
set @count = count - 1
end
select @var1, @var2
OUTPUT
2014 2015
РЕДАКТИРОВАТЬ 2
Причина:
Я хочу иметь SP, который будет выводить запрошенные данные о продажах, так как я уже спросил здесь о том, как я могу получить данные, теперь мне было поручено сделать их динамичными, особенно за те годы, когда мы 15 лет. Запрашиваемые данные могут быть от 1 до 15 лет
Моя первая идея - провести годы в виде строки
exec SP_test '2014,2015,2016'
, что заставило меня задуматься о создании динамических переменных, чтобы я мог заменить годы в моем запросе, наряду с созданием строк, требуемых запросом для получения соответствующего результата
Полный код псевдо
declare @string as nvarchar(max) = '2014,2015,2016'
declare @count as int = (select LEN(REPLACE(@string, ',', '**')) - LEN(@string) )
while @count <> 0
begin
--create variable statement here
Declare @var + @count as nvarchar(max)
set @string = (select substring(@string,0,CHARINDEX(',', @string)))
set @var +@count = @string
set @count = count - 1
end
--up to this point lets say I have created @var1 and @var2
SELECT Item,Price,Quantity,PriceYear,QuantityYear INTO TempFinal
FROM (
SELECT Item,Price,Quantity, 'Price+@var1' as PriceYear,'Quantity+@var1' as QuantityYear FROM @Table+@var1
UNION ALL
SELECT Item,Price,Quantity, 'Price@var2' as PriceYear,'Quantity@var2' as QuantityYear FROM @Table+@var2
) MyTables
Это всего лишь пример, но запрос должен строить строки. В примере 2 года, поэтому запрос создал два оператора select (это еще одна проблема, но я думаю, что у меня может быть решение для этого) Затем уникальные поля с указанием лет.
SELECT item, SUM([Price+@var1])[Price+@var1],SUM([Quantity+@var1])[Quantity+@var1],SUM([Price+@var2])[Price+@var2],SUM([Quantity+@var2])[Quantity+@var2]
FROM (
SELECT item,Price,Quantity,PriceYear,QuantityYear
FROM TempFinal) up
PIVOT (SUM(Quantity) FOR QuantityYear IN ([Quantity+@var2],[Quantity+@var2]) AS pvt
PIVOT (SUM(Price) FOR PriceYear IN ([Price+@var1],[Price+@var2]) AS pvt2
GROUP by item
ORDER BY item
--do take note that @var1 contains `2014` and @var2 contains `2015`