2010-02-17 4 views
2

동일한 데이터를 참조하지만 다른 조건을 사용하는 두 개의 열이있는 테이블을 생성하는 SQL 쿼리를 수행하려고합니다.SQL Union 쿼리의 행 결합

쿼리 결과 :

  • 가능한

    • 총 수량 총 수량가 특정 항목 의 총 수입니다 수량

    내 결과 쿼리는 같은 열을 포함 할 필요가 사용할 수있는은 같은 항목의 하위 집합이지만 "사용 가능"으로 플래그가 지정된 항목 만 있습니다.

    나는 형식의 UNION 사용하려고했습니다

    물론 같은 것을 생산
    SELECT 
        '0' as Quantity, 
        COUNT (item.pkid) as Available 
    FROM itemInstance, itemType 
    WHERE 
        itemInstance.availability = 'AVAILABLE' 
        AND itemInstance.type = itemType.primary_key 
    UNION 
    SELECT 
        COUNT (DISTINCT item.pkid) as Quantity, 
        '0' as Available 
    FROM itemInstance, itemType 
    WHERE itemInstance.type = itemType.primary_key 
    

    가 :

    Quantity Available 
    1 0   2 
    2 4   0 
    3 0   3 
    4 7   0 
    

    내가 정말 원하는 :

    Quantity Available 
    1 4   2 
    2 7   3 
    

    하나를 도움을 주시면 감사하겠습니다. 감사!

  • 답변

    5

    내가 쿼리의 모든 측면을 이해 생각하지 않는다,하지만 기본적으로 다음과 같이 작동합니다 :

    SELECT 
        COUNT(*) as Quantity, 
        SUM(CASE WHEN itemInstance.availability = 'AVAILABLE' 
          THEN 1 
          ELSE 0 
          END) As Available 
    FROM itemInstance, itemType 
    WHERE itemInstance.type = itemType.primary_key 
    

    CASE는 각각의 matchin 행에 대한 1 및-matchin되지 행에 대한 0 될 것 이 값의 합계는 사용 가능한 항목 수입니다.

    BTW : 당신은 더 나은 readablity에 대한 (특히 더 복잡한 쿼리) 명시 적 참여 표기로 전환 할 수 있습니다 :

    ... 
    FROM itemInstance 
    JOIN itemType ON (itemInstance.type = itemType.primary_key) 
    
    +0

    가 더 나은 기록 할 수 없습니다 - 잘. – incarnate

    +0

    이것은 아름답게 작동합니다! 감사! – RobotNerd

    +0

    명시 적 조인을 사용하도록 요청 해 주셔서 감사합니다. 암시 적 조인은 그렇게 가난한 실천입니다. – HLGEM