テーブルを作成するにはどうすればいいですか?SQLで列を知らないでテーブルを作成
アイデアは私が3列あるテーブルデータということです:私は必要なものID
、NAME
、およびVALUE
がNAME
の値に応じて複数の値を取得する方法である - 私が行うことができませんそれは単純なWHERE
またはJOIN
です(これは他の値が必要です - 私の質問では他のNAME
の値が必要です)。
NAME
のすべての異なる値を列に変換するために、このテーブルが構築される方法のためにPIVOT
にしたいので、それ以降の検索で取得するのが簡単になります。
私が今したいことは、私は別のクエリの結果を結合するために後でそれを使用することができますので、何とか一時テーブル/変数にこれを保存することです...
ですから、例えば:
列:今
CREATE TABLE MainTab
(
id int,
nameMain varchar(max),
notes varchar(max)
);
CREATE TABLE SecondTab
(
id int,
id_mainTab, int,
nameSecond varchar(max),
notes varchar(max)
);
CREATE TABLE DATA
(
id int,
id_second int,
name varchar(max),
value varchar(max)
);
テーブルデータからいくつかの例のデータ:今すぐ
| id | id_second_int | name | value |
|-------------------------------------------------------|
| 1 | 5550 | number | 111115550 |
| 2 | 6154 | address | 1, First Avenue |
| 3 | 1784 | supervisor | John Smith |
| 4 | 3467 | function | Marketing |
| 5 | 9999 | start_date | 01/01/2000 |
::::
「名前」にはたくさんの異なる値があり、「名前」の値によって多くの異なる値を取得する必要があることを想像してください... その理由は、数字、住所、スーパーバイザ、関数、開始日、...列になる。 これは、可能な列の量のために私は動的に行います - それらはすべてINステートメントにすべて書き込むのに時間がかかります。新しい文字列を入力するたびに手動で追加することを忘れたくはありません。私が実行した結果(@query)をtempTab /変数に格納したいと思っていることが分かっています。私は後でmainTabと結合するために使用したいと思っています... @cols(DATA.nameの値を保持しています)を使用できればいいですが、これを行う方法を理解できないようです。
追加: 動的ではない方法を使用すると( 'IN'の後にすべての値を手動で書き留めます)、statusという列を作成する必要があります。今のところ、この列には(これまでのところ、値はピボットされていないテーブルには存在しないため、どこにでもNULLがあります)、日付に応じて「オープン」または「クローズ」したいとします(私はstart_dateとend_dateを持っています)
CASE end_date
WHEN end_date < GETDATE() THEN pivotTab.status = 'closed'
ELSE pivotTab.status = 'open'
はどこでこの文を置くことができるのは、私のメインのクエリは次のようになりましょう:
SELECT * FROM(
(SELECT id_second, name, value, id FROM TABLE_DATA) src
PIVOT (max(value) FOR name IN id, number, address, supervisor, function, start_date, end_date, status) AS pivotTab
JOIN SecondTab ON SecondTab.id = pivotTab.id_second
JOIN MainTab ON MainTab.id = SecondTab.id_mainTab
WHERE pivotTab.status = 'closed';
しかし、テーブルとしてtemp_tableを宣言してから、別の列を知りたいのですが、どれだけ多くの列が保持されるかはわかりません。そのため、Dynamic SQL(ただし、私はこの分野の全面的なノブであり、それを使用する方法はまだ学習しています) この時点で自分のタスクを完了するのに必要なのは、作成したピボットタブ内のいくつかの列をテーブルの他の値に応じて 'status'カラムのデータ) – LisekKL
@LisekKL *" temp_tableをテーブルとして宣言しなければなりません... "* - いいえ、あなたはしません。 'select into'が自動的に作成され、select文で返されたデータが入力されます。それともあなたの本当の必要から何かを逃したのですか? –
ok申し訳ありませんが、これは私にとってはうまくいかなかったのは、データベースへの読み取り専用アクセスがあるため、テーブル、関数、またはプロシージャを作成できないからです... どうやって私のニーズに応じてピボットテーブルにデータを入力できるように、CASEステートメントを使用します(どこに置くか)。 – LisekKL