1

デフォルトで20列のテーブルが1つあります

D1 D2 D3...D20 という名前のこれらの 20 列は、選択クエリを使用して、他の列を動的に追加したい.. ex 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 まで追加し、この列を他の列、つまり fro から選択します。 D21~D31も追加・選択

クエリは

select * ,'  ' as D21 from tbl1

これにより、D20 までの 20 列すべてと、追加の D21 が 1 つ得られます。他の列名をハードコーディングせずに、D31 までそれが必要です。

4

3 に答える 3

2

以下のコードを試してください

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)
于 2013-12-11T10:41:23.370 に答える
0

動的 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
于 2013-12-11T10:41:26.770 に答える
0

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

それがあなたのために働くかどうか私たちに知らせてください。

ありがとう、よろしく、チランジーヴィ。

于 2013-12-11T10:57:48.493 に答える