2017-06-06 4 views
0

Ich baue einen Bericht, der die Teile eines Arbeitsauftrags in verschiedenen Abteilungen zeigt. Betrachten Sie die folgende TabelleGruppieren von Daten auf bestimmte Weise

work_order part dept_code datein 
aaaa  11 XXX  20/01/2017 
aaaa  12 BBB  22/01/2017 
bbbb  12 XXX  20/01/2017 
bbbb  15 XXX  22/01/2017 
cccc  13 XXX  20/01/2017 
cccc  17 XYX  20/01/2017 

Jetzt i in einer solchen Art und Weise diese Daten zu gruppieren möchten, dass nur die Arbeit, um mit verschiedenen dept_code oben zeigen sollte. RESULT

work_order part dept_code datein 
aaaa  11 XXX  20/01/2017 
aaaa  12 BBB  22/01/2017 
cccc  13 XXX  20/01/2017 
cccc  17 XYX  20/01/2017 

Antwort

2

eine Unterabfrage verwenden, die diese work_order Elemente identifiziert, die abteilungsZahl ist größer als 1:

select * from work 
where work_order in 
    (select work_order 
    from work w2 
    group by w2.work_order 
    having count(w2.dept_code) > 1 
) 
2

So etwas wie dieses

SELECT work_order, part, dept_code, datein 
FROM [Table] 
WHERE work_order in 
(
    SELECT work_order 
    FROM [Table] 
    GROUP BY work_order 
    HAVING COUNT(DISTINCT dept_code) > 1 
) 
+0

Warum 'distinct work_order' verwenden? 'GROUP BY work_order' erzeugt sowieso eindeutige work_orders, nicht? –

+1

Guter Punkt, ich habe die Antwort geändert. – Simon

2

Sie verwenden Zahl kann() über() wie folgt:

Select * from (
    Select *, cnt = Count(dept_code) over(partition by work_order, dept_code) from yourTable ) a 
    Where a.cnt = 1 
+1

'distinct' in Fensterfunktionen funktioniert nicht. –