2016-08-08 21 views
0

Ich möchte entweder eine case-Anweisung hinzufügen, um Y/N für die "All Complete" zurückzugeben. spalte oder schließe alle Zeilen aus, in denen "Alles vollständig" = "Y" ist.Fallanweisung basierend auf mehreren Spaltenwerten

Damit 'All Complete' auf Y gesetzt wird, müssen alle ID_Status für jeden Kunden und jede Codenummer vollständig sein. Jeder Kunde kann mehrere IDs oder Code_Number haben. Ich habe Probleme, die CASE-Logik in mehreren Spalten zu verstehen, in denen die Werte nicht immer gleich sind. Danke für jede Hilfe.

IDTable: 
ID ID_Status Customer Code_Number All Complete? 

1 Complete Alex  123   Y 
2 Complete Alex  123   Y 
3 Complete Brian  321   Y 
4 Complete Brian  321   Y 
5 Open  Brian  425   N 
6 Complete Brian  425   N 
7 Open  Charlie 123   N 
8 Complete Charlie 123   N 
9 Open  Charlie 123   N 
10 Complete Donald 555   N 
11 Complete Donald 555   N 
12 Testing Donald 555   N 
13 Complete Eric  620   Y 

Antwort

1

Unter der Annahme, SQL Server 2008+:

WITH CTE AS 
(
    SELECT *, 
      COUNT(*) OVER(PARTITION BY Customer, Code_Number) Total, 
      SUM(CASE WHEN Id_Status = 'Complete' THEN 1 ELSE 0 END) OVER(PARTITION BY Customer, Code_Number) Completed 
    FROM dbo.YourTable 
) 
SELECT ID, 
     ID_Status, 
     Customer, 
     Code_Number, 
     CASE WHEN Total = Completed THEN 'Y' ELSE 'N' END [All Complete] 
FROM CTE; 
+0

OP braucht 'Code_Number' auch für' Complete' – techspider

+0

@techspider guter Fang, dank berücksichtigt werden. Aktualisiert meine Antwort – Lamak

+0

Hallo @Lamak, statt CTE verwenden, könnte ich verwenden (Entschuldigung für die Formatierung): SELECT ID, ID_Status, Kunde, Code_Number, CASE WHEN Total = Abgeschlossen THEN 'Y' ELSE 'N' END [Alle abgeschlossen] VON ( SELECT *, COUNT (*) OVER (PARTITION BY Kunde, Code_Number) Total, SUM (CASE WHEN Id_Status = 'Complete' THEN 1 ELSE 0 END) OVER (PARTITION BY Customer, Code_Number) Abgeschlossen VON dbo.YourTable ) – bojackh

0
Select * 
    , CASE WHEN EXISTS 
        (SELECT 1 FROM TableName t1 
         Where t1.Customer = t2.Customer 
         AND t1.Code_Number = t2.Code_Number 
         AND t1.ID_Status <> 'Complete' 
        ) 
      THEN 'N' ELSE 'Y' END AS [All Complete?] 

from TableName t2