2016-08-08 2 views
0

'전체 완료'를 위해 Y/N을 반환하는 사례 명세서를 추가하고 싶습니다. '전체 완료'= 'Y'인 모든 행을 제외하거나 제외하십시오.여러 개의 열 값을 기반으로하는 사례 명세서

'전체 완료'를 Y로 설정하려면 각 고객 및 각 코드 번호에 대해 모든 ID_Status를 완료해야합니다. 각 고객은 여러 개의 ID 또는 Code_Number를 가질 수 있습니다. 값이 항상 같지 않은 여러 열에서 CASE 논리를 이해하는 데 문제가 있습니다. 어떤 도움을 주셔서 감사합니다. SQL 서버 2008+ 가정

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 

답변

1

:

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

영업 이익은 Code_Number'도 풍어 @techspider Complete' – techspider

+0

, 감사'을 취급 할 '필요가있다. SELECT ID, ID_Status, 고객, Code_Number, CASE THEN 'Y'ELSE 'N'완료 총 = 내 대답 – Lamak

+0

안녕 @Lamak 업데이트 대신 CTE를 사용하여, 나는 (포맷에 대한 사과를) 사용할 수 있습니다 END [모두 완료] ( SELECT * FROM , COUNT (* 고객 BY) OVER (PARTITION, Code_Number) 총, SUM (CASE WHEN (파티션 OVER) THEN 1 ELSE 0 END Id_Status = '완료' 고객, 코드 번호) 완료 FROM 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 
관련 문제