2014-11-21 4 views
0

아래 쿼리는 필요한 정보를 반환합니다. 두 열은 상태 번호이고 두 번째 열은 총 숫자입니다.SQL - 두 개의 일치하는 값을 반환합니다.

SELECT T.number as 'Number',T.total as 'highest service level' 
FROM(
    SELECT PARTNER_WORKORDER.statusNo as number, count(statusNo) as total 
    FROM PARTNER_WORKORDER 
    inner join PARTNER_WORKORDER_ADDRESS 
    ON PARTNER_WORKORDER.salesOrderNo = PARTNER_WORKORDER_ADDRESS.salesorder_no 
    WHERE orderDt <= '2012-11-20 00:00:00.000' AND country_code <> 'US' 
    group by PARTNER_WORKORDER.statusNo 
) 
AS T 

지금해야 할 일은 가장 합계가 높고 일치하는 상태 번호 만 반환하는 것입니다. MAX가 가장 높은 합계를 줄 것이라고 알고 있지만 그 합계와 일치하는 상태 번호를 얻는 방법을 모르겠습니다. 나는 CASE를 사용할 필요가 있다고 생각하지만, 나는 그런 경험이 전혀 없다.

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

+0

단일 레코드를 반환하려고하십니까? 또는 각각의 'Number'에 대한 최대 레코드를 원하십니까? – paqogomez

+1

DBMS는 무엇입니까? –

답변

4

그냥 order bylimit 또는 top 또는 fetch first 1 row only을 사용하십시오. 예 :

SELECT PARTNER_WORKORDER.statusNo as number, count(statusNo) as total 
FROM PARTNER_WORKORDER inner join 
    PARTNER_WORKORDER_ADDRESS 
    ON PARTNER_WORKORDER.salesOrderNo = PARTNER_WORKORDER_ADDRESS.salesorder_no 
WHERE orderDt <= '2012-11-20 00:00:00.000' AND country_code <> 'US' 
group by PARTNER_WORKORDER.statusNo 
ORDER BY total desc 
LIMIT 1 

이 경우 하위 쿼리가 필요하지 않습니다. SQL 표준은 limit 1 대신 fetch first 1 rows only이되지만 많은 데이터베이스가이를 지원하지는 않습니다 (아직).

+0

select 행에 SELECT TOP 1 PARTNER _....로 변경 했으므로 이제는 완벽하게 작동합니다. Microsoft SQLServer를 사용하고 있는지 여부에 대한 확신이 들지는 않았지만 회신을 받으면 올바른 답변을 얻을 수 있습니다. 감사합니다. – enigmahfc

+0

예, SQL Server를 사용하고 있기 때문입니다. SQL Server, Sybase, Teradata 및 MS Access는 'TOP'을 사용합니다. Postgres와 MySQL은'LIMIT'을 사용합니다; 오라클은'rownum'을 사용합니다. DB2, Oracle 및 SQL Server는'FETCH FIRST 1 ROWS ONLY'를 사용합니다. 후자는 표준이지만 오라클과 SQL Server의 최신 버전 만 지원합니다. –

관련 문제