1
╔════╦══════╦════════════╗
║ ID ║ NAME ║    WORK    ║
╠════╬══════╬════════════╣
║  1 ║ a    ║ complete   ║
║  1 ║ a    ║ complete   ║
║  2 ║ b    ║ incomplete ║
║  3 ║ c    ║ complete   ║
║  4 ║ d    ║ incomplete ║
║  4 ║ d    ║ complete   ║
║  5 ║ e    ║ complete   ║
║  5 ║ e    ║ complete   ║
║  5 ║ e    ║ incomplete ║
║  6 ║ f    ║ incomplete ║
║  6 ║ f    ║ incomplete ║
╚════╩══════╩════════════╝

すべての宿題が完了したか、1 つの未完了の ID のみを取得するクエリを作成したい

たとえば、上記のデータでは、これらのIDのみを取得したい

1, 2, 3, 4, 5 

複数の未完成作品があるため、6 ではありません

4

2 に答える 2

5
SELECT  ID, Name
FROM    tableName
GROUP   BY ID, NAME
HAVING  SUM(CASE WHEN Work = 'Incomplete' THEN 1 ELSE 0 END) < 2
于 2013-02-03T05:41:37.770 に答える
1

で次のようなことができるはずですNOT EXISTS

SELECT DISTINCT H.ID
FROM Homework H
WHERE H.Work = 'Complete'
   AND NOT EXISTS (
        SELECT * 
        FROM Homework H2 
        WHERE H2.Work != 'Complete' AND H2.ID = H.ID )

これがSQL Fiddleです。

編集 - 実際、1 つの不完全なものも必要であることに気付きました - 編集させてください。それはそれを行う必要があります:

SELECT DISTINCT H.ID
FROM Homework H
GROUP BY H.ID
HAVING COUNT(*) = 1 OR (
  NOT EXISTS (
    SELECT * 
    FROM Homework H2 
    WHERE H2.Work != 'Complete' 
      AND H2.ID = H.ID ))

さらにフィドル: http://sqlfiddle.com/#!3/c7d43e/3

幸運を。

于 2013-02-03T05:38:39.413 に答える