2014-11-21 97 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 

我現在需要做的是返回JUST最高的總數和匹配它的狀態數字。我知道MAX會給我最高的總數,但我不知道如何獲得與總數相匹配的狀態數字。我想我需要使用CASE,但是我從來沒有過這方面的經驗。

任何幫助將不勝感激。

+0

你只是想要返回一條記錄嗎?或者想爲每個「數字」的最大記錄? – paqogomez 2014-11-21 17:10:42

+1

什麼是您的DBMS? – 2014-11-21 17:10:43

回答

4

只需使用order bylimittopfetch 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標準將是fetch first 1 rows only而不是limit 1,但並不是很多數據庫都支持(還)。

+0

我將它更改爲SELECT TOP PARTNER _....作爲選擇行,現在它完美地工作。不知道這是因爲我使用的是否是Microsoft SQLServer,但您的回覆使我得到了正確的答案。非常感謝。 – enigmahfc 2014-11-21 17:25:38

+0

是的,那是因爲您正在使用SQL Server。 SQL Server,Sybase,Teradata和MS Access使用'TOP'; Postgres和MySQL使用'LIMIT'; Oracle使用'rownum'; DB2,Oracle和SQL Server使用「只提取第一行」。後者是標準的,但只有最新版本的Oracle和SQL Server支持它。 – 2014-11-21 22:43:58