2015-05-18 111 views
1

我有銷售數據。訂單獲得銷售代碼,就像訂單來自網絡聊天一樣。我們正在處理涉及銷售代表的訂單,而不是自動在線訂單。需要篩選條件的數據

每一個這樣的訂單將得到的001碼,然後也將獲得例如 「BCS」

所以我們將有數據

order# Ord.date ord.time Amt etc. sales code 

12345  05/18/15 090000 100.00  001 
12345  05/18/15 100000 100.00  BCS 

所以這是好的,我的問題在我的水晶報告中是輸入第三個代碼的時候。該應用程序沒有停止。但所以當我們有第三排

12345  05/18/15 140000 100.00  BCQ 

所以這第三排扔掉我的CR總數。

我需要創建一個視圖,這個數據將返回所有的001,然後只返回非001代碼的第一個,這意味着根據較低的日期/時間。請注意,完全有可能存在各種日期,但我們只想要更早的日期。

我不知道如何在SQL查詢中創建這樣的條件。所以在我們的例子中,我們需要001行和BCS,因爲時間和日期早於第三行。

回答

0

嘗試這樣:

Select * from 
(
    Select * 
    , row_number() over (partition by [OrderNo] 
         order by case SalesCode when '001' then 1 else 2 end 
         , Ord.Date, Ord.Time 
         ) 
        as RowN 
    from MyTable 
) a 
where a.RowN in (1,2) 

如果與SalesCode 001行始終爲訂單創建的第一行,那麼你可以按日期和時間,這樣就跳過case語句和公正的秩序,它將按日期和時間返回每個訂單的前兩行:

Select * from 
(
    Select * 
    , row_number() over (partition by [OrderNo] 
         order by Ord.Date, Ord.Time 
         ) 
        as RowN 
    from MyTable 
) a 
where a.RowN in (1,2) 

請注意,這兩個假設每個訂單都只有一個001行。如果它們可能有多個001行,然後是非001行,並且您想要返回所有001行,則需要不同的解決方案。

+0

001始終是第一個, –

+0

@Hassan - 是否爲您解決這個問題?如果沒有,請讓我們知道什麼不起作用。 – APH

+0

真棒完美! –