2013-08-30 2 views
0

테이블에서 선택하고 CASE 문을 사용하여 세 행을 조인하고 싶습니다. 나는 C++에 익숙하다. IF 문장이 될 것이다. 여기에 잘못된 의사 코드가있다. (이 것은 조인되는 행에 적용된다. 왜.)SQL : 여러 행의 값에 따라 여러 행에 참여하십시오.

IF (value1 == 1) // IF any of the rows have value1 == 1 
{ 
    value1 = 1; 
    value2 = 0; 
} 
ELSE IF (value1 == 0 && value2 == 1) // IF all of the rows have value1 == 0 and any have value2 == 1 
{ 
    value1 = 0; 
    value2 = 1; 
} 

그래서 세 개의 행은 다음과 같이 보면 (ID를 동일해야 예를 들어,

ID value1 value2 
-------------------- 
1  1  0 
1  0  0 
1  0  1 

내가 좋아하는 것) ... 저를 요구하지 않는 합류 결과적 행이되도록

1  1  0 

그러나 3 개의 원래 행

ID value1 value2 
-------------------- 
1  0  0 
1  0  0 
1  0  1 

모습은 내가 결과에 합류 행

1  0  1 

나는 겉만 번지르르 한 테이블 형식에 대 한 미안 해요는, 내가 마크 업에 익숙하지 않아요 싶습니다. 올바른 방향으로 도움이나 조언을 주시면 감사하겠습니다. 쿼리 당 3 개 이상의 행을 조인해야하므로 속도가 실제로 문제가되어서는 안됩니다.

+0

을 * : 단순히 4 자리하여 줄 들여 쓰기 (또는 행을 선택하고을 누르십시오 도구 모음의 "코드 샘플"버튼 {}})을 사용하여 올바르게 서식을 지정하십시오. –

+0

value1과 value2에 다른 숫자를 사용하면 목표를 더 잘 설명 할 수 있습니다. 모든 것이 1 또는 0 일 때, 당신이 목표로하는 것을 식별하는 것이 쉽지 않습니다. – WarrenT

+0

1과 0이 가장 명확 할 것이라고 생각했는데, 무엇을 사용해야합니까? 아니면 어떤 복잡한 숫자일까요? – sage6

답변

0

이것은 전혀 JOIN이 아니며 논리에 따라 결과를 집계해야하는 것으로 보입니다. 당신이 사용하고있는 RDBMS 알고 좋은 것입니다, 그러나 이것은 대부분에서 작동합니다 : 당신의 * 겉만 번지르르 한 형식에 대한

SELECT ID, 
     Value1, 
     CASE WHEN Value1 = 1 THEN 0 ELSE Value2 END Value2 
FROM ( SELECT ID, 
       MAX(CASE WHEN Value1 = 1 THEN 1 ELSE 0 END) Value1, 
       MAX(Value2) Value2 
     FROM YourTable 
     GROUP BY ID) A 
+0

감사합니다 백만, 그 매력처럼 :) :) (나는 그 서식을 염두에 두도록하겠습니다) – sage6

관련 문제