2010-01-05 2 views
1

그룹입니다. 가능한 한 최선을 다해 설명하겠습니다. 희망적이라고 생각합니다. "Sponsor 's"고객 유형과 CustomerType의 해당 계정 중 1 년, 2 년 및 3 년 후에 비활성화 된 계정 수를 알려주는보기에서 데이터를 가져옵니다. 예를 들어 :존재하지 않는 값에 대해 0 값을 강제로 입력하십시오.

SponsorID | CustomerType | ExpiredAfter | Total 
1234  D    1 Year   5 
1234  RA    1 Year   7 
1234  CA    1 Year   3 
1234  D    2 Years  2 
1234  RA    2 Years  4 
1234  CA    2 Years  1 
1234  D    3 Years  8 
1234  RA    3 Years  1 
1234  CA    3 Years  6 

오전 데 문제는 SponsorID가 ExpiredAfter 1 년, 그래서 아무것도 데이터에 표시되지 어떤 RA가 없을 수도 있습니다. 그래서 대신에 점점 :

SponsorID | CustomerType | ExpiredAfter | Total 
1235  D    1 Year   5 
1235  RA    1 Year   0 
1235  CA    1 Year   3 

내가 얻을 :

SponsorID | CustomerType | ExpiredAfter | Total 
1235  D    1 Year   5 
1235  CA    1 Year   3 

을 다시 말하지만,이 중 하나가 어떤 의미가 있습니다,하지만 내가 원하는 것은 관계없이 경우 모든 ExpiredAfter에 대한 모든 고객의 유형을 포함하는 경우 확실하지 가치가 있는지 없는지. 값이 없으면 강제로 0 또는 Null로 설정합니다. 보고 목적으로 데이터 행을 0으로해야합니다.

제안 사항?

+1

왼쪽 외부 조인 어쩌면? –

답변

8

INNER JOIN 대신 LEFT JOIN을 사용해야하는 것 같습니다.

+0

LEFT JOIN은 값이없는 행을 지원할 때 null이 표시되도록합니다. 'timmyd'의 대답을보십시오. –

+0

OP는 행이 존재하는 한 '0'또는 'NULL'중 하나가 작동한다고 말합니다. 나는 LEFT JOIN이 여전히 이것을 해결한다고 믿지만, 관련 질의를 보지 않고도 우리는 모두 어둠 속에서 찌르는 듯하다. – pix0r

6

TOTAL이 계산 된 경우 사용중인 DBMS 및 쿼리에 따라 ISNULL (총계, 0) 또는 COALESCE (총계, 0)를 사용해야 할 수도 있습니다. LEFT JOIN의 null 값을 가짐으로써 여전히 0 값을 가지지 않습니다.

+0

+1 : 영업 질문에 답하십시오. COALESCE는 ANSI 표준입니다. 그렇지 않으면 dbs 사이에 NULL 검사 기능이 다릅니다. IE : NVL for Oracle, IFNULL for MySQL, ISNULL은 SQL Server ... –

관련 문제