3

コースの進行状況を記録するテーブルがあります。コースが開始されると、ユーザー/コースの組み合わせごとに新しいレコードが追加されます。コースが完了すると、そのレコードは「完了」ステータスで更新されます。コースを修了したことがないユーザーの記録を見つける必要があります。

例の表:

User  Course  Status
A      1       S
A      2       C
B      1       S
C      2       S
D      2       C
C      3       S

次を見つけるクエリが必要です。

User  Course  Status
B      1        S
C      2        S
C      3        S

どんな助けでも大歓迎です。

4

4 に答える 4

2
select user, course, status
from your_table
where user in 
(
    select user
    from your_table
    group by user
    having sum(CASE WHEN status = 'C' THEN 1 ELSE 0 END) = 0
)
于 2012-11-29T17:42:41.130 に答える
1
Select User, Course, Status from MyTable where User not in (Select Distinct User from MyTable where Status = 'C')
于 2012-11-29T17:42:13.083 に答える
1
SELECT User,Course,Status FROM YourTable a
LEFT JOIN
(SELECT DISTINCT User FROM YourTable WHERE Status='C') CompletedAnything
ON a.User=CompletedAnything.User
WHERE COmpletedAnything.User IS NULL
于 2012-11-29T17:44:17.370 に答える
0

ここにあなたが望むものを与えるSQL Fiddleがあります: http://sqlfiddle.com/#!2/b6988/1

クエリは次のとおりです。

select User, Course, Status
from mytable
where User not in 
  (select distinct User from mytable where status = 'C' ans User is not null)
于 2012-11-29T17:53:09.170 に答える