2017-08-30 30 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