2016-06-27 2 views
2

나는 테이블이 나는 # 1과 # 3과 같은 시나리오를 가지고 ID의 수를 계산하기 위해 찾고 있어요 SQL 서버를 2014SQL Server에서 특정 시나리오를 계산할 수 있습니까?

을 사용하고이

ID | I | II | III | IV | V | 
=============================== 
1 | 1 | 0 | NULL|NULL|NULL| 
2 |NULL|NULL|NULL | 0 | 1 | 
3 | 1 | 0 | 0 |NULL|NULL| 
4 |NULL|NULL|NULL |NULL| 1 | 
. .  . . . . 
. .  . . . . 
. .  . . . . 

처럼 보인다 있습니다. 거기에 할 수있는 쿼리가 있습니까? 감사!

+0

당신이 무슨 뜻 이죠 "# 1과 # 3과 같은 시나리오"? 모든 열의 값이 정확히 같습니까? – ZLK

+0

내 말은 특정 단계에서 값을 갖고 있지만 NULL로 끝나는 사람들의 수를 계산하고 싶다는 것입니다. # 1과 마찬가지로 1 단계와 2 단계에서 값을 가지지 만 다음 단계에서는 'NULL'입니다. 특정 ID가 'NULL'로 시작하지만 값으로 끝나면 그 점에 대해 신경 쓰지 않습니다. 제공하는 쿼리를 사용하여 쿼리의 모든 가능성을 지정해야합니까? 내 테이블에는 다음과 같은 데이터가있을 수 있습니다. ID | 나 | II | III | IV | V | 5 | NULL | NULL | 0 | 1 | NULL | 6 | 1 | 0 | 0 | 1 | NULL | . . . # 5가 아니라 # 6을 걱정할 것입니다. –

답변

0

난 당신이 # 1과 # 3 당신이 정말로 당신이 값이 행을 계산하려는 의미 같은 시나리오를 쓸 때 1 또는 행 3가 무엇을 행 동일 같은데요. 그렇다면 이런 식으로 할 것입니다.

select count(*) 
from YourTable 
where (I = 1 
     and II = 0 
     and III is null 
     and IV is null 
     and V is null) 
    or (I = 1 
     and II = 0 
     and III = 0 
     and IV is null 
     and V is null); 

또는, 위의 쿼리를 다음과 같은 형태로 조금 단순화 수 :

select count(*) 
from YourTable 
where (I = 1 
     and II = 0 
     and (III = 0 or III is null) 
     and IV is null 
     and V is null); 

아마도 이런 일이 당신이 찾고있는 무엇 :

select * 
from YourTable 
where coalesce(I, II, III, IV, V) is not null; 

또는이 :

select 
    ValidCnt = sum(case 
     when coalesce(I, II, III, IV, V) is not null then 1 
     else 0 
     end), 
    InvalidCnt = sum(case 
     when coalesce(I, II, III, IV, V) is null then 1 
     else 0 
     end) 
from YourTable; 
+0

무슨 뜻인지는 특정 단계에서 값을 가지고 있지만 NULL로 끝나는 사람들의 수를 계산하고 싶다는 것입니다. # 1과 마찬가지로 1 단계와 2 단계에서 값을 가지지 만 다음 단계에서는 'NULL'입니다. 특정 ID가 'NULL'로 시작하지만 값으로 끝나면 그 점에 대해 신경 쓰지 않습니다. 제공하신 검색어를 사용하여 검색어의 모든 가능성을 지정해야합니까? 내 테이블에 다음과 같은 데이터가있을 수 있습니다. ID | 나 | II | III | IV | V | 5 | NULL | NULL | 0 | 1 | NULL | 6 | 1 | 0 | 0 | 1 | NULL | . . . # 6이 아니라 # 5를 신경 써야합니다. –

+0

null이 아닌 값으로 시작한다는 점만 신경 쓰면됩니다. 다른 말로하면, 당신이 신경 써야 할 것은 null이 아닌 값을 가져야한다는 것입니다. 그런 다음 당신이해야 할 일은 YourTable의 에서 I가 null이 아닌 것입니다. . – Yobik

+0

NULL로 "끝나는"것에 대해서만 신경 쓰지만 NULL은 특정 열에있을 필요가 없습니다. –

0

귀하의 테이블 이름 (ID)에서 ISNULL (I, -1)! = - 1

설명 : 귀하의 열 이름은 &입니다. where 조건에 더 많은 열을 지정할 수 있습니다. 이 도움이

+0

ISNULL (I, -1)! = - 1 부분을 나에게 설명 할 수 있습니까? 고맙습니다. –

+0

이것은 '내가 null이 아닌 YourTable의 select count (*)'와 논리적으로 동일하지만 권고하지는 않습니다. – Yobik

+0

당신이 어디에 null로 모든 조건을 변환 할 null을, 그래서 내가 사용하는 ISNULL (-1, -1) -1 때 열 -1 ​​= -1로 ISNULL (난, -1) 그것은 -1을 반환 할 Null을 찾았습니다. 그래서 조건은 true가 될 것이고 계산되지 않을 것입니다. –

0

희망,

CREATE TABLE Joe (ID INT , I int NULL, II int NULL, III int NULL, IV int NULL, V int NULL) 

INSERT INTO Joe VALUES (1, 1, 0, NULL, NULL, NULL) 
INSERT INTO Joe VALUES (2, NULL, NULL, NULL, 0, 1) 
INSERT INTO Joe VALUES (3, 1, 0, 0, NULL, NULL) 
INSERT INTO Joe VALUES (4, NULL, NULL, NULL, NULL, 1) 

-- SELECT * FROM Joe 

SELECT J.* FROM Joe J 
JOIN 
    (SELECT J.ID,Count(0) Counter FROM Joe J WHERE J.I IS NOT NULL 
    AND J.V IS NULL 
    GROUP BY J.Id) JoeCounts ON J.Id = JoeCounts.Id 
관련 문제