Student ( STU
) & Programs ( PGM
) テーブルをクエリし、 ごとに複数のレコードID
がある場合でも、 ごとに1 つの結合されたレコードを返す必要があります。を使おうと思ったのですが、集計関数でもGROUP BY句でもないので、 での 使い方がわかりません。PGM
ID
GROUP BY STU.ID, STU.FN, STU.LN
PGM.CD
SELECT
テーブルにはPGM
レコードがある場合とない場合があります。以下の私のクエリは、これらの可能な結果を返します。
PGM
レコードがない場合、1 つの結果のみID
が返され、PGM.CD
列がNULL
(または''
ごとにCASE
) 返されます。PGM
テーブルにレコードが 1 つしかなく、PGM.CD = 200
('DLA'
ごとにCASE
) の場合、ごとに 1 つの結果のみID
が返されます。PGM
テーブルにレコードが 1 つしかなく、PGM.CD <> 200
(''
ごとにCASE
) の場合、ごとに 1 つの結果のみID
が返されます。PGM
テーブルに ( ごとに) 複数のレコードがある場合ID
、つまり 121、200、156 の場合、 ごとに複数の行が生成されますID
。
ID
列の結果を組み合わせて、ごとに 1 行のみを返すクエリが必要PGM.CD
です。PGM.CD
列は''
or 200
( 'DLA'
per 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
これがすべて理にかなっていることを願っています。助けてくれてありがとう。
アンソニー