2017-08-30 31 views
0

某列组我有一个看起来像这样如何在SQL

enter image description here

SQL表,我想按系统显示,如果所有的任务都完成与否(如果所有完成系统的状态然后完成其他未完成)。

enter image description here

+1

请仔细阅读http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/ 285557和接受的答案 –

+0

和https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very -simple-sql-query – Yunnosch

回答

1

你可以使用MAX()GROUP BY。假设这些是状态列中唯一可用的两个值。

SELECT Name, System, MAX(Status) Status 
FROM Table 
GROUP BY Name, System 
+1

我不知道为什么这是downvoted,这与OP的给定数据完美罚款。在这种情况下,MAX()将始终工作,因为它看起来像'未完成'不能在'完成'之前出现,因为在'创建帐户'之前您无法'设置权限',因此'未完成'总是按字母顺序排列。但如果情况并非如此,则需要CASE声明。 – Simon

+0

@西蒙,我自己有点困惑。我确实增加了一个免责声明 - “假设这些是唯一的两个值...”谢谢你的确认。 – BJones

+0

这工作,谢谢! – macbb

0

SELECT DISTINCT名称/系统,然后使用子查询的状态。

子查询可以是CASE WHEN EXISTS()结构。

0
SELECT DISTINCT 
    Name, 
    System, 
    CASE 
     WHEN (SELECT NULL AS [Empty] FROM Table AS t_inner WHERE t_inner.Status = 'Not Done' AND t_inner.System = t_outter.System AND t_inner.Name = t_outter.Name) EXISTS 
     THEN 'Not Done' 
     ELSE 'Done' 
    END 
FROM 
    Table AS t_outter