在MS SQL中分组

时间:2018-04-25 14:38:19

标签: sql sql-server

如果你有一个快速的分钟,我有一个SQL问题。

以下是我的数据的样子。现在我正在尝试编写一个查询,根据LOGGING STATUS对ID号进行分类,如下所示。输出ID状态需要显示为一行(一个值)。

如果ID#9630的记录状态仅为失败,则输出将为FAIL

ID     STATUS   ZIP-CODE
9630    FAIL        8959
9630    FAIL        8959

如果ID#19630的登录状态仅为成功,那么输出将为SUCCESS

ID      STATUS     ZIP-CODE
19630   SUCCESS      72259
19630   SUCCESS      72216

如果id#1963的加载状态为失败并且成功如下,则输出将为BOTH

ID    STATUS    ZIP-CODE
18963   fail      92259
18963   success   96216
18963   fail      62296

我试图找出如何编写SQL以实现上述输出。

3 个答案:

答案 0 :(得分:2)

也许这就是你想要的:

select id,
       (case when min(status) = max(status) then max(status) else 'both'
        end) as status
from t
group by id;

如果您只想要给定状态的值:

select (case when min(status) = max(status) then max(status) else 'both'
        end) as status
from t
where id = @id;

答案 1 :(得分:2)

SELECT id,IIF(MIN(status)=MAX(status),MAX(status),'both') AS [status]
FROM t
GROUP BY id

答案 2 :(得分:1)

对于实际的最终目标来说,这有点含糊不清,但从我的解释来看,这就是我在这种情况下所写的内容。

SELECT DISTINCT ID, STATUS = 
  CASE StatusCheck
     WHEN MIN(STATUS) >= MAX(STATUS) THEN MIN(STATUS)
     WHEN MAX(STATUS) >= MIN(STATUS) THEN MAX(STATUS)
     ELSE 'BOTH'
   END,
 [ZIP-CODE]
 FROM [LOGGING STATUS].[STATUS]
ORDER BY ID

考虑到你正在使用MSSQL,你还应该考虑在T-SQL中查看GROUP-BY子句。如果这不是您正在寻找的东西,那么这也可能是一个开始的地方。