1

SQL ベースのレポート プロジェクトに取り組んでいますが、DB へのアクセスが制限されています。SELECT クエリを作成し、取得したデータを一時テーブル/テーブル変数に挿入することしかできません。ストアド プロシージャやその他の関数を作成/実行できません。

私が実行しているクエリは、すべてのエンジニアと彼らが持っているさまざまな主要なスキルをプールして、後で各エンジニアが持っているスキルや特定のスキルに該当するエンジニアを確認できるようにするためのものです。

この目的のために、同じクエリで以前に取得した値に基づく構造である、柔軟な構造を持つテーブル変数/一時テーブルを作成しようとしています。

例えば

最初のアウトプット: アダム・ブラッド・フリオ・マルティネス

2 番目の出力 (空白で区切られたスキル): VOIP TTS DBA Exchange Server

1 番目の出力を行として使用し、2 番目の出力を列として使用する、またはその逆の一時テーブル/テーブル変数を作成します。次に、メイン DB のさまざまな値に従って、この新しいテーブルにデータを入力します。

これを行う方法をアドバイスするか、この問題に対する他の解決策を提供してください。ありがとうございました

4

2 に答える 2

2

私はあなたができると信じています。

まず、クエリに基づいて動的構造を持つ一時テーブルを作成する必要があります。次のように実行できます。

スクリプト テンプレートを宣言します。

Set @ScriptTmpl = 'Alter table #tempTable Add [?] varchar(100);

クエリに基づいて必要な列を挿入するビルド スクリプト:

Select @TableScript = @TableScript + Replace(@ScriptTmpl, '?', ColumnName) From ... どこで ...

次にスクリプトを実行し、新しいテーブルに2番目のクエリの値を入力します

更新:

一時テーブルの動的作成の完全なサンプルを次に示します。サンプルでグローバル一時テーブルを使用しました。

declare @scriptTemplate nvarchar(MAX)
declare @script nvarchar(MAX)
declare @tableTemplate nvarchar(MAX)

SET @tableTemplate = 'create table ##tmptable (?)'
SET @scriptTemplate = '? nvarchar(500),'
SET @script = ''

Drop table ##tmptable

Select @script = @script + Replace(@scriptTemplate, '?', [Name])
From Account
Where name like 'ES_%'

SET @script = LEFT(@script, LEN(@script) - 1)

SET @script = Replace(@tableTemplate, '?', @script)

Select @script

exec(@script)

Select * from ##tmptable
于 2014-08-22T10:05:11.700 に答える
0

まず、一時テーブルではなく、ピボットを使用して目的を達成できる場合があります。

第二に、列名が「Adam Brad」のテーブルを本当に作成したい場合、解決策は動的 SQLですが、権限によっては実行できない場合があります。

于 2014-08-22T10:16:29.310 に答える