:SQL:我有一個SQL查詢(MSSQLSERVER),我使用子查詢列添加到結果集選擇的子查詢
SELECT P.name,
(select count(*) from cars C where C.type = 'sports') AS sportscars,
(select count(*) from cars C where C.type = 'family') AS familycars,
(select count(*) from cars C where C.type = 'business') AS businesscars
FROM people P
WHERE P.id = 1;
查詢以上僅僅是從測試設置,這是一個有點廢話,但它以我想象中的例子爲例。我實際上正在處理的查詢跨越了許多複雜的表格,這些表格只會分散眼前的問題。
在上面的例子中,表格「people」中的每條記錄還有三列:「wantsSportscar」,「wantsFamilycar」和「wantsBusinesscar」。現在我想要做的只是如果people表中的各個「want .....」字段設置爲「true」,則只需執行每個附加列的子選擇。換句話說,如果P.wantsSportscar對特定人員設置爲true,我只想執行第一個子查詢。第二和第三個子查詢應該以類似的方式工作。
所以這個查詢應該工作的方式是它顯示了一個特定的人的名字以及他想要擁有的汽車類型可用的模型數量。值得注意的是,我的最終結果集總是隻包含一個記錄,即一個特定用戶的記錄。
重要的是,如果某人對某種類型的汽車不感興趣,則該類型的列將不會包含在最終結果集中。一個例子,以確保這是明確的:
如果人A想要一輛跑車和一輛家庭轎車,結果將包括列「名稱」,「跑車」和「家庭轎車」。
如果B人想要一輛商務車,結果將包括「名稱」和「businesscar」列。
我一直在嘗試使用IF,CASE和EXISTS語句的各種組合,但到目前爲止我還沒有能夠得到一個語法正確的解決方案。有誰知道這是否可能?請注意,該查詢將存儲在一個存儲過程中。
我想這解決了我的問題(見我的評論回覆ChrisCM的答案)。此解決方案將允許我檢查編程代碼中不同列的值,並採取適當的措施。這對我來說足夠了。謝謝。 – Jerry 2009-06-18 12:17:17