我需要查询 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
我希望所有这些都是有道理的。谢谢您的帮助。
安东尼