2

次のような構造のテーブルがあります

id   g_id   name    status
---------------------------------------
1   111     item1   1
2   111     item2   1
3   111     item3   1

6   113     item1   -1
7   113     item2   1
8   113     item3   1

9   114     item1   1
10  114     item2   2

ステータスには値を含めることができます。成功:1失敗:-1進行中:2

Need the following output 
GroupID     Status
------------------
111         Success
113         Failed
114         In-Progress

グループ内の1つが-1の場合、結果は失敗し、すべてが1の場合、成功するはずです。また、一部が1で、残りが2の場合、結果は進行中のはずです。上記の結果を選択するための最良の方法は何ですか?

4

3 に答える 3

4

SQLフィドルの例

select
    g_id as GroupID,
    case
        when min(status) = -1 then 'failed'
        when max(status) = 2 and min(status) = 1 then 'in progress'
        when max(status) = 1 and min(status) = 1 then 'success'
    end as Status
from table1
group by g_id
于 2012-11-01T11:50:40.770 に答える
1
SELECT t.g_id, 
    CASE WHEN EXISTS(SELECT 1 FROM Table1 x WHERE x.g_id = t.g_id AND x.status = -1) THEN 'Failed' 
         WHEN EXISTS(SELECT 1 FROM Table1 x WHERE x.g_id = t.g_id AND x.status = 2) THEN 'In-Progress'
         ELSE 'Success' END AS Status
FROM Table1 t
GROUP BY t.g_id

SQLフィドル

于 2012-11-01T11:53:32.673 に答える
1

CASEステートメントの簡単な使用。

SELECT g_id,  
       CASE 
          WHEN MIN(Status) = -1 THEN 'Failed'
          WHEN MAX(Status) = 2  THEN 'In Progress'
          ELSE 'Succes'
       END
    AS Status
FROM Table1 
GROUP BY g_id 

このSQLFiddleを参照してください

于 2012-11-01T12:13:21.197 に答える