복붙노트

[SQL] 빈 반환 카운트 대신 0

SQL

빈 반환 카운트 대신 0

좋은 하루 모두. 여기 내 코드는 다음과 같습니다

SELECT 
    'Expired Item -'+ DateName(mm,DATEADD(MM,4,AE.fld_LOAN)) as [Month]
    ,COUNT(PIT.fld_ID)'COUNT'
    ,SUM (PIT.fld_GRAM)'GRAMS'
    ,SUM (PH.fld_AMNT)'PRINCIPAL'
FROM  #AllExpired AE
    INNER JOIN Transactions.tbl_ITEM PIT
    ON AE.fld_MAINID=PIT.fld_MAINID
    INNER JOIN Transactions.tbl_HISTO PH
    ON AE.fld_MAINID =PH.fld_MAINID
GROUP BY DATENAME(MM,(DATEADD(MM,4,AE.fld_LOAN)))

내가 직면하고있어 문제는 검색 어떠한 결과 값이없는 경우는 더 값이없는 경우 내 카운트 함수가 0을 반환하지 않습니다, Sum 함수는 NULL을 반환하지 않습니다이다. 대신, 그냥 빈을 출력합니다. 왜 그렇게 내가 그것을 어떻게 해결할 수있다?

여기서 샘플 출력의 스크린 샷이다.

물론이 내가 원하는 것이 아니다. I 출력 제로와 널 (null)로합니다. 내가 잘못 알고하지 않습니다, 제발 도와주세요. 감사합니다.

해결법

  1. ==============================

    1.당신은 레코드가 소스에 존재하지 않는 경우, GROUP BY 절을 사용하는 경우 모든 레코드를 출력 할 기대할 수 없다.

    당신은 레코드가 소스에 존재하지 않는 경우, GROUP BY 절을 사용하는 경우 모든 레코드를 출력 할 기대할 수 없다.

    당신은 SUM 및 COUNT 함수에서 0의 출력을 원하는 경우에, 당신은 GROUP BY를 사용하지 말아야합니다.

    그 이유는 더 기록이없는 경우, GROUP BY 절은에 의해 그룹에 아무것도 없다는 것입니다, 그리고 당신에게 출력을 제공 할 수 없습니다.

    예를 들면 :

    SELECT COUNT(*) FROM (SELECT 'Dummy' AS [Dummy] WHERE 1 = 0) DummyTable
    

    값을 '0'으로 함께 하나 개의 레코드를 반환합니다 :

    SELECT COUNT(*) FROM (SELECT 'Dummy' AS [Dummy] WHERE 1 = 0) DummyTable
    GROUP BY [Dummy]
    

    더 레코드를 반환하지 않습니다.

  2. ==============================

    2.난 당신이 tbl_PawnItem에 해당하는 레코드가없는 경우에도 행이 반환되도록하기 위해 OUTER에 INNER에서 조인 변경할 필요가 상상 -

    난 당신이 tbl_PawnItem에 해당하는 레코드가없는 경우에도 행이 반환되도록하기 위해 OUTER에 INNER에서 조인 변경할 필요가 상상 -

    SELECT 
        'Expired Item -'+ DateName(mm,DATEADD(MM,4,AE.fld_LoanDate)) as [Month]
        ,COUNT(PIT.fld_PawnItemID)'COUNT'
        ,SUM (PIT.fld_KaratGram)'GRAMS'
        ,SUM (PH.fld_PrincipalAmt)'PRINCIPAL'
    FROM  #AllExpired AE
        LEFT JOIN Transactions.tbl_PawnItem PIT
            ON AE.fld_PawnMainID=PIT.fld_PawnMainID
        LEFT JOIN Transactions.tbl_PawnHisto PH
            ON AE.fld_PawnMainID=PH.fld_PawnMainID
    GROUP BY DATENAME(MM,(DATEADD(MM,4,AE.fld_LoanDate)))
    
  3. ==============================

    3.아마도 #AllExpired이 비어, 또는 중 하나가 결과를 반환하지 않습니다 조인?

    아마도 #AllExpired이 비어, 또는 중 하나가 결과를 반환하지 않습니다 조인?

    기억 내부는 #AllExpired이 (가) 반환 아무것도에 가입하지 비어 그래서 때문에, 반환하기 위해 양쪽에 필요 결과를 결합한다.

    OUTER로 변경 가입 할 수 있습니다.

  4. from https://stackoverflow.com/questions/19221630/count-returning-blank-instead-of-0 by cc-by-sa and MIT license