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,其余为 2,则结果应为 In Progress。我可以选择上述结果的最佳方法是什么?

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 回答