2

MS-SQL で一時テーブルを作成したいが、他の行データでフィールドを作成する

表 X

FieldA 
=======
SkillA
SkillB
SkillC

一時テーブル

SkillA     SkillB    SkillC
============================
Null         Null       Null

ご協力ありがとう御座います

サーバー側で実行したい。そして、行データの量がわかりません。広げます。

TABLE X
FieldA    FieldB
===================
 SKillA    SubjectA
 SkillB    SubjectB
 SkillC    SubjectC
...
...
*** I don't know amount row data ***

Temp Table
SkillA   SubjectA   SkillB   SubjectB  SkillC  SubjectC
========================================================

どうもありがとうございました。

4

1 に答える 1

3

これを試してみてください -

クエリ:

IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
   DROP TABLE #temp

DECLARE @temp TABLE (FieldA NVARCHAR(50))
INSERT INTO @temp (FieldA)
VALUES 
    ('SkillA'),
    ('SkillB'),
    ('SkillC')

SELECT *
INTO #temp
FROM (
    SELECT FieldA, a = CAST(NULL AS INT) 
    FROM @temp
) src
PIVOT 
(
    MAX(a) 
    FOR FieldA IN (SkillA, SkillB, SkillC)
) unpvt

SELECT * 
FROM #temp t

出力:

SkillA      SkillB      SkillC
----------- ----------- -----------
NULL        NULL        NULL

更新 2:行データの量がわからない

クエリ:

IF OBJECT_ID (N'tempdb.dbo.##temp') IS NOT NULL
   DROP TABLE ##temp

DECLARE @temp TABLE (FieldA VARCHAR(20), FieldB VARCHAR(20))
INSERT INTO @temp (FieldA, FieldB)
VALUES 
    ('SKillA', 'SubjectA'),
    ('SkillB', 'SubjectB'),
    ('SkillC', 'SubjectC')

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
    SELECT * 
    INTO ##temp 
    FROM (
    SELECT ' + STUFF((
    SELECT DISTINCT ', [' + FieldA + '] = NULL, [' + FieldB + '] = NULL'
    FROM @temp
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ') t 
    WHERE 1 != 1'

EXEC sys.sp_executesql @SQL

SELECT * 
FROM ##temp t

出力:

SKillA      SubjectA    SkillB      SubjectB    SkillC      SubjectC
----------- ----------- ----------- ----------- ----------- -----------
于 2013-06-13T13:10:53.560 に答える