2012-08-28 3 views
2

값 목록이있는 테이블이 있습니다. -1 빈 값입니다,사용자 당 유효한 값 계산

Person  FieldType1  FieldType2 
     1    4    5 
     2    1    1 

사용자 ID의 목록과 사용자 테이블이의 목록을 반복하는 방법이있을 것입니다 :

ID FieldType1A FieldType1B FieldType2A FieldType2B Person 
    1    15   14   10   -1  1 
    2    16   -1   12   10  1 
    3    17   -1   5   6  1 
    4    6   -1   7   -1  2 
... 

그래서 결과는해야한다 결과 집합에 사람 목록을 생성하는 값 (필드 유형이 0 일 때 완벽하게 유효 함) 나는 T-SQL Column Values Count에 대한 대답이 제가 시도하고있는 방향의 한 단계라고 생각합니다. 그러나 동일한 열을 결합하는 방법은 확실하지 않습니다 (A/Bs는 답변 목록을 허용합니다). 그리고 나는 각 유효한 응답의 수를 세지 않으려 고 시도하면서 모든 유효한 값을 결합하는 데 관심이 있습니다.

답변

4

CASE 표현식을 사용하면 모든 음수가 아닌 값을 1로 변경하고 -1 값을 0으로 변경 한 다음 합계 할 수 있습니다.

SELECT Person, 
    SUM(CASE WHEN FieldType1A <> -1 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN FieldType1B <> -1 THEN 1 ELSE 0 END) AS FieldType1, 
    SUM(CASE WHEN FieldType2A <> -1 THEN 1 ELSE 0 END) + 
     SUM(CASE WHEN FieldType2B <> -1 THEN 1 ELSE 0 END) AS FieldType2 
FROM YourTable 
GROUP BY Person 
+0

+1 나는 당신이 쓴 정확한 쿼리를 작성했다! –

+0

그게 내가 찾고 있던 바로 그거야. 그것 대신에 사용했던 C# 코드보다 훨씬 빨리 실행됩니다. 감사합니다 – Robert

2
SELECT Person, 
count(nullif(FieldType1A, -1)) + count(nullif(FieldType1B, -1)) as FieldType1, 
count(nullif(FieldType2A, -1)) + count(nullif(FieldType2B, -1)) as FieldType2 
FROM yourtable 
GROUP BY person 
+0

우,'NULLIF'에 +1; 나는 항상 그 기능을 잊어 버린다. – LittleBobbyTables