多くのフィールドのいずれかの回答に基づいて、セカンダリテーブルからレコードを選択するためにSQLでクエリを実行しようとしています。特定のフィールドはレコードごとに異なりますので、私は第二のクエリでCOLUMNタイトルとして最初のクエリのVALUEを使用する必要があります。サブクエリの列名として1つのフィールドの値を使用する
PassID | PassType | PersonID |
1 | 3 | 54 |
2 | 4 | 59 |
資格に必要な表:
PassType | QualificationField | QualificationAnswer
3 | Q8 | Yes
4 | Q3 | All
パーソン表:
PersonID | Name |...| Q3 |...| Q8
54 | John |...| Non |...| No
59 | Jane |...| ALL |...| No
Essent
は、私は(この例では単純化)3台
パステーブルを持っています私が決定する必要があるのは、彼らが割り当てられたパスに基づいて適格基準を持っていれば、それぞれの人のためです。
テーブルは実際ははるかに大きなシステムの一部であり、personテーブルの列はデータベースのさまざまな反復で動的に追加できるため、テーブル構造を大幅に変更することはできません。どの人がこの「何かの余分なもの」に適格であるかを判断するために、SQLクエリで答えます。
私はすでに私の一つの出力で、次のフィールドを与えるために、パスの種類と資格要件に合致するクエリ(Q_PersonWithPass)を持っている:私は今行う必要がある
PersonID | PassType | QualificationField | QualificationAnswer
54 | 3 | Q8 | Yes
59 | 4 | Q3 | All
何が上のサブクエリを実行していますpersonテーブルを使用してQualificationFieldの回答に基づいてカラムを検索し、PersonテーブルのフィールドがQualificationAnswerと一致するかどうかを確認します。
私はこれを試してみた:
SELECT PersonID, PassType, QualificationField, QualificationAnswer,
(SELECT dbo.Q_PersonWithPass.QualificationField
FROM dbo.Person
WHERE (PersonID = dbo.Q_PersonWithPass.PersonID)) AS QualFld
FROM dbo.Q_PersonWithPass
は、このように単に「Q8」またはQualFldで「Q3」ではなく答え、「いいえ」または「すべて」
を表示するには、方法私はありますサブクエリ内の変数ではなく列タイトルとして 'dbo.Q_PersonWithPass.QualificationField'の値をSQLに認識させることができますか?
私はそれが可能ではないと思います。 – ATC
動的SQLクエリhttp://www.kodyazを構築することができます。com/articles/build-sql-server-dynamic-sql-query-example.aspxを実行し、最後のクエリ文字列をsp_executesqlで実行してください – Eralper