2016-05-16 11 views
4

Betrachten Sie die folgende Tabelle. Jedes Dokument (id) gehört zu einer Gruppe (group_id).Überprüfen Sie, ob alle Datensätze in der gleichen Gruppe akzeptierte Typen sind

----------------------- 
id group_id value 
----------------------- 
1  1   A 
2  1   B 
3  1   D 
4  2   A 
5  2   B 
6  3   C 
7  4   A 
8  4   B 
9  4   B 
10  4   B 
11  4   C 
12  5   A 
13  5   A 
14  5   A 
15  6   B 
16  6   NULL 
17  6   NULL 
18  6   D 
19  7   NULL 
20  8   B 

1/Jedes Dokument hat einen Wert NULL, A, B, C oder D

2/Wenn die Dokumente in der gleichen Gruppe alle entweder A oder B als Wert haben, wird die Gruppe

abgeschlossen

3/In diesem Fall würde die gewünschte Ausgabe lesen:

--------------------- 
group_id completed 
--------------------- 
    1   0  <== because document 3 = D 
    2   1  <== all documents have either A or B as a value 
    3   0  <== only one document in the group, value C 
    4   1  <== all documents have either A or B as a value 
    5   1  <== all documents have value A 
    6   0  <== because of NULL values and value D 
    7   0  <== NULL 
    8   1  <== only one document, value B 

Ist es möglich, diese Ergebnismenge abzufragen?

Da ich in SQL nicht sehr erfahren bin, würde jede Hilfe geschätzt werden!

Antwort

7

Versuchen Sie, diese

SELECT [group_id], 
     CASE 
     WHEN Count(CASE WHEN [value] IN ('A', 'B') THEN 1 END) = Count(*) THEN 1 
     ELSE 0 
     END AS COMPLETED 
FROM yourtable 
GROUP BY [group_id] 
+0

nicht MIN (CASE WHEN [Wert] IN ('A', 'B') THEN 1 ELSE 0 END) gleich und billiger sein? – Turo

+0

@Turo - Beide sind nicht gleich –

+0

in welchem ​​Fall unterscheiden sie sich? – Turo

Verwandte Themen