2016-09-30 84 views
-2

的鉛丹值這是迄今爲止我已經寫了我的查詢代碼:SQL返回從多個密鑰

 select 
     workorderkey, 
     WarrantyRoutingStep, 
     StepOrder 
    from tblFAWOWarrantyRoutingsOEM WarrantyRoutings 
    where 
workorderkey=220870 and --fyi i do not want to do this 
StepCompleteDate IS NULL 

結果是這樣的

Current Output

我如何得到它看起來像這樣,所以它只返回StepOrder列中具有最小值的那一行)?請注意,我不只想要workorderkey 220870的結果;我希望它對每個工單進行分組和返回一個結果 - 只需輸入該過濾器進行測試即可。

Desired Output

請原諒圖片代替文字表結果。第一次海報,一個月的觀衆。剛剛幾周前開始編寫SQL。

+0

你試過GROUP BY workorderkey HAVING StepOrder = MIN(StepOrder)? – C8H10N4O2

+0

請提供沒有外部鏈接的輸入和輸出。 – Gasper

+1

SELECT TOP 1 ..... –

回答

-2
select 
    min(StepOrder), 
    workorderkey, 
    WarrantyRoutingStep 
from tblFAWOWarrantyRoutingsOEM WarrantyRoutings 
where StepCompleteDate IS NULL 
GROUP BY workorderkey, WarrantyRoutingStep 

這會爲你工作

+0

WarramtyRoutingStep有多個每個工作鍵的唯一值,所以這條路線不會工作 – Matt

1

如果你的DBMS支持窗口的功能很簡單:

SELECT * 
FROM 
    (
     select 
      workorderkey, 
      WarrantyRoutingStep, 
      StepOrder, 
      ROW_NUMBER() OVER (PARTITION BY workorderkey ORDER BY StepOrder) as RowNumber 
     from tblFAWOWarrantyRoutingsOEM WarrantyRoutings 
     where StepCompleteDate IS NULL 
    ) t 
WHERE 
    t.RowNumber = 1 

無窗的功能,你還可以這樣做:

SELECT wr2.* 
FROM 
    (
     select 
      workorderkey, 
      MIN(StepOrder) as MinStepOrder 
     from tblFAWOWarrantyRoutingsOEM WarrantyRoutings 
     where StepCompleteDate IS NULL 
     GROUP BY 
      workorderkey 
    ) t 
    INNER JOIN tblFAWOWarrantyRoutingsOEM wr2 
    On t.workorderkey = wr2.workorderkey 
    AND StepCompleteDate IS NULL 

但如果每個工單的「步序」不唯一,則後面的方法仍然可能與關係結束。

+0

不會他仍然在這裏得到null這是在他的問題 –

+0

@MichaelRudnerEvanchik在他的問題沒有任何地方沒有任何數據或期望的數據或敘述圖像無效! – Matt

+0

不知道爲什麼這是在操作問題「SQL返回最小值時,另一個字段爲空」,那就是爲什麼我把,而不是steporder爲null –