我需要查詢學生(STU
)&程序(PGM
)表和每ID
返回一個聯合的紀錄,即使有多個PGM
記錄每ID
。我想過使用GROUP BY STU.ID, STU.FN, STU.LN
,但當時我不知道如何在SELECT
使用PGM.CD
,因爲它不是由clause.`SQL Server 2008中 - 選擇(每個ID)的多個記錄合併到一個記錄
的PGM
表可能有也可能沒有記錄的聚合函數或GROUP。我下面的查詢返回這些可能的結果:
- 如果沒有
PGM
記錄,每ID
只有一個結果被返回和 的PGM.CD
列返回NULL
(佔CASE
''
)。 - 如果只有一個在
PGM
表記錄,並PGM.CD = 200
('DLA'
每CASE
),然後每ID
只有一個結果返回。 - 如果只有一個在
PGM
表記錄,並PGM.CD <> 200
(''
每CASE
),然後每ID
只有一個結果返回。 - 如果在
PGM
表多於一個的記錄(每ID
),即 121,200,156,這每ID
產生多個行。
我需要一個查詢,每ID
只返回一行,結合PGM.CD
列的結果。該PGM.CD
欄應該只返回''
或200
('DLA'
每CASE
)
SELECT STU.ID, STU.FN, STU.LN,
CASE PGM.CD
WHEN '200' THEN 'DLA'
ELSE ''
END
FROM STU
LEFT JOIN PGM
ON STU.ID = PGM.PID
這是我的查詢將返回(沒有的CASE
修改PGM.CD
):
STU.ID STU.FN STU.LN PGM.CD
1000 Bruce Wayne NULL
1001 Clark Kent 200
1002 Barry Allen 151
1002 Barry Allen 101
1003 Hal Jordan 126
1003 Hal Jordan 200
1003 Hal Jordan 101
這是我的查詢退貨(WithCASE
修改PGM.CD
):
STU.ID STU.FN STU.LN PGM.CD
1000 Bruce Wayne
1001 Clark Kent DLA
1002 Barry Allen
1002 Barry Allen
1003 Hal Jordan
1003 Hal Jordan DLA
1003 Hal Jordan
我需要它返回此:
STU.ID STU.FN STU.LN PGM.CD
1000 Bruce Wayne
1001 Clark Kent DLA
1002 Barry Allen
1003 Hal Jordan DLA
我希望這一切纔有意義。謝謝您的幫助。
安東尼
謝謝。我不得不將它改爲'LEFT JOIN',因爲它沒有返回'STU'表中的每個記錄(並非所有的學生都在Programs表中有記錄),但是一旦我這樣做了,它就完美地工作了。感謝有關SQL小提琴(!)的信息。我不知道那件事。 –
本網站有人向我展示了這一點,它非常有用:)我很高興它可以幫助你! –
András,如果你有時間看下我對Mehdi的評論,你能解釋爲什麼使用'WITH AS'(帶有'MAX CASE')給出了正確的結果,而不是直接使用'MAX CASE' 'SELECT'? –