我正在嘗試解決SQL中的查詢以從輔助表中選擇記錄,這是基於對許多字段之一的答案。特定的字段因記錄而異,所以我需要使用我的初始查詢中的VALUE作爲輔助查詢中的COLUMN標題。使用一個字段的值作爲子查詢中的列名稱
我有三個表(簡化本示例)
通行證表:
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
埃森特不同的通行證有不同的標準,使他們有資格獲得額外的......我需要確定的是每個人,如果他們具有基於他們被分配的通行證的資格標準。
這些表實際上是一個更大的系統的一部分,人表中的列可以在數據庫的不同迭代中動態添加,所以我不能顯着更改表結構 - 我需要能夠提取我的在SQL查詢中回答以確定哪些人有資格獲得這個「額外的東西」。
我已經有一個查詢(Q_PersonWithPass)相匹配的通類型和資質要求,給我以下字段中一個輸出:
PersonID | PassType | QualificationField | QualificationAnswer
54 | 3 | Q8 | Yes
59 | 4 | Q3 | All
我現在需要做的是在運行一個子查詢人員表查找與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
因此只是顯示在QualFld「Q8」或「Q3」,而不是回答「否」或「全部」
有沒有一種方法,我可以讓SQL將「dbo.Q_PersonWithPass.QualificationField」中的值識別爲列標題而不是子查詢中的變量?
我不認爲這是可能的。 – ATC
您可以構建動態SQL查詢http://www.kodyaz。com/articles/build-sql-server-dynamic-sql-query-example.aspx並用sp_executesql執行最終的查詢字符串 – Eralper