SQLの質問..SQL クエリ結果セットに列を動的に追加するにはどうすればよいですか?
-
11-09-2019 - |
質問
データベース内のオブジェクト (「ファイル」) に関する詳細を返すレポートを作成しています。私のアプリケーションでは、ユーザーがファイル オブジェクトに対して使用する独自のフラグを作成できます。フラグは基本的に名前で構成され、フラグ インスタンスには、親ファイル オブジェクトに設定されているかどうかを示すビット値が格納されます。
データベース内のファイルごとに 1 行を返すクエリを作成したいと考えています。結果セットの最初の数列にはファイルの詳細 (ID、名前、サイズなど) が含まれ、残りの列にはビット値が返されたフラグ名が含まれます。指定されたファイル行にフラグが設定されているかどうかを示します。
それは理にかなっていますか?クエリはどうやって書けばいいのでしょうか?
助けていただきありがとうございます。
編集:説明..
このクエリの一部として、ユーザーが作成したフラグ (設計時にはフラグがわかりません) を返すサブクエリを実行し、詳細を返すためにメイン クエリに各フラグ値のチェックを組み込む必要があります。ファイルについて。
スキーマを簡略化すると次のようになります。
- ファイル {ID、名前}
- フラグ {ID, 名前}
- FileFlags {FileId, FlagId} - このテーブルの行は、ファイルにフラグが設定されていることを示します
次のような列を含む結果セットを返すクエリが必要です。
ファイルID ファイル名 フラグ1名 フラグ2名 .... フラグ名
解決
あなたはで利用可能なピボットの機能を調べることで開始することができますSQL Serverの2005+。それといくつかの文字列の連結を使用すると、列
任意の数のクエリを組み立てることができるはずですあなたのコメントに基づいて次のようになります選択します:
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>, ...
From Table
PIVOT (
...
FOR
...
)
他のヒント
なぜ必要なロジックをストアドプロシージャを作成していない - ユーザー固有のフラグを照会など - ?とそれに基づいて動的に必要な変数をクエリ文字列を構築する
あなたは、ユーザーに動的なクエリセットを返すためにEXECUTE
を使用することができます。 http://msdn.microsoft.com/en-us/library/ms188332を参照してください。 .aspxのの
あなたが列に行を有効にするクロス集計クエリを、必要とするかもしれないような音。フラグが親テーブルへの一対多の関係として、別のテーブルに格納されていますか。
私はあなたが欲しいと思うの別名です。ここで http://www.sql-tutorial.net/SQL-Aliasesからの例です。 .aspする
SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee
私は本当にさらに助けるためにあなたのスキーマを参照してくださいする必要があります。
編集
たぶん、あなたは、ネストされたSELECT
sを必要としています。
http://sqlzoo.net/1a.htmする