Динамически добавлять столбец с помощью запроса select
У меня есть одна таблица с 20 столбцами по умолчанию
Эти 20 столбцов, названных как D1 D2 D3... D20, теперь с запросом выбора я хочу добавить другие столбцы динамически.. для бывших D21 D22... D31, так как я могу написать запрос для динамического добавления этих столбцов с приращением значение... максимальный предел 31, пожалуйста, помогите
столбцы таблицы по умолчанию
D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15 D16 D17 D18 D19 D20
Теперь я хочу добавить столбцы непрерывно к D20, т.е. D21 и т. д. до D31, при выборе этого столбца также добавляется и выбирается другой столбец, то есть с D21 по D31.
запрос
select * ,' ' as D21 from tbl1
это даст мне все 20 столбцов до D20 и один дополнительный D21, я хочу его до D31 без жесткого кодирования другого имени столбца
3 ответа
Попробуйте ниже код
declare @a int =21
Declare @sql varchar(max)='select *,'
while @a <32
begin
set @sql = @sql + cast(@a as varchar) + ' as D' + cast(@a as varchar) + ' ,'
set @a = @a+1
end
set @sql = substring(@sql,0,len(@sql)-1) + ' from tbl1'
exec( @sql)
Если вы хотите писать только с SQL-запросом
Надеюсь, это может сработать для вас.
with sample as
(SELECT 1 + LEVEL-1 idx
FROM dual CONNECT BY LEVEL <= 31)
select listagg('D'||idx, ',')
within group (order by idx) as list
from sample
where idx >= 21
пожалуйста, дайте нам знать, если это работает для вас.
Спасибо и всего наилучшего, Chiranjeevi.
Используя динамический SQL, вы можете сделать что-то вроде этого:
DECLARE @SQL AS NVARCHAR(MAX) = 'select *';
WITH Numbers (N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY object_id) N FROM sys.all_objects
)
SELECT @SQL = @SQL + ', '' '' as D' + CAST(N AS NVARCHAR)
FROM Numbers WHERE N BETWEEN 21 AND 31;
SET @SQL = @SQL + ' from tbl1';
EXEC sp_executesql @SQL