我需要查询 Student( STU) 和 Programs( PGM) 表并返回一个组合记录ID,即使每个有多个PGM记录ID。我考虑过使用GROUP BY STU.ID, STU.FN, STU.LN,但后来我不确定如何在 中使用PGM.CD,SELECT因为它不是聚合函数或在 GROUP BY 子句中。
该PGM表可能有也可能没有记录。我下面的查询返回这些可能的结果:
- 如果没有
PGM记录,则仅ID返回一个结果 per 并且该PGM.CD列返回NULL(或''perCASE)。 - 如果表中只有一条记录
PGM,并且PGM.CD = 200('DLA'per theCASE),则 perID仅返回一个结果。 - 如果表中只有一条记录
PGM,并且PGM.CD <> 200(''per theCASE),则 perID仅返回一个结果。 - 如果表中有多个记录
PGM(perID),即 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
这是我的查询返回的内容(带有CASE修改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
我希望所有这些都是有道理的。谢谢您的帮助。
安东尼