2016-12-21 49 views
0

我需要將2個SQL語句連接在一起,並且這兩個語句都可以自己工作。但我不知道如何將兩者合併爲一個SQL語句。加入多個select sql語句(4個表)

我在第一條語句中有兩個表格,TR120TR1201

的SQL是這樣的:

select 
    PRODUCT, PRICE, QUANTITY, INVOICE.DATE 
from 
    TR1201 
left join 
    (select 
     DATE, ID as INVOICE_ID, INVOICE 
    from TR120) as INVOICE on INVOICE.INVOICE_ID = ID 
where 
    INVOICE.DATE >= '2016-06-01' and INVOICE.DATE <= '2016-06-30' 

這在特定的時間內返回的所有我公司銷售的產品列表,價格,數量,銷售日期從16年1月6日至30-06 -16。

現在我需要根據第一條SQL語句中的產品和銷售日期,找出我在不同的兩個表TR100TR1001中購買產品的最新價格。

select 
    PRODUCT, PRICE, SUP.DATE 
from 
    TR1001 
left join 
    (select 
     DATE, ID as SUP_ID, SUP_INVOICE 
    from TR100) as SUP on SUP.SUP_ID = ID 

這會返回我用價格和日期購買的所有產品的列表。根據購買的產品和日期,我只需要此查詢中的最後一條記錄。

TR120

ID | INVOICE | DATE 
1 | 000001 |2016-06-05 
2 | 000002 |2016-06-15 
3 | 000003 |2016-06-25 

TR1201

ID | PRODUCT | PRICE A | QUANTITY 
1 | A  | 2,00 | 5 
2 | A  | 2,00 | 2 
3 | A  | 2,00 | 1 

TR100

ID | SUP_INVOICE | DATE 
1 | 160001  | 2016-05-30 
2 | 160002  | 2016-06-16 

TR1001

ID | PRODUCT | PRICE B 
1 | A  | 0,5 
2 | A  | 0,7 

我試圖得到的結果是這樣的:

PRODUCT | PRICE A (tr1201) | QUANTITY | DATE (tr100) | PRICE B (tr1001) 
A  | 2    | 5  | 2016-05-30 | 0,5 
A  | 2    | 2  | 2016-05-15 | 0,5 
A  | 2    | 1  | 2016-05-16 | 0,7 

這就是我想做的事:(

回答

0

你試過FIRST_VALUE?

FIRST_VALUE ([scalar_expression ]) 
    OVER ([ partition_by_clause ] order_by_clause [ rows_range_clause ]) 

它的工作原理是這樣的:

select distinct id, 
     first_value(price) over (partition by id (,sup) order by date DESC (latest, ASC for oldest)) as last_price 
from table; 

文檔可以在這裏找到:https://msdn.microsoft.com/en-us/library/hh213018.aspx

+0

謝謝你!我會嘗試這兩個示例並報告結果。 – HEki

0

我沒有你的表,這樣無法測試,所以我只能提供諮詢意見。 我認爲你需要的是一個外部申請這樣,而不是加入

select 
     T1.Product 
    , T1.Price 
    , T2.DATE -- Alias this 
    , T2.Price -- Alias this 
    , T3.DATE -- Alias this 
    , T3.Price -- Alias this 
from T1 
OUTER APPLY (
    select top 1 
      Date 
     ,Price 
    from table2 
    WHERE ID = T1.Id AND product = T1.Product-- plus any other joins 
    ORDER BY Date desc 
) as T2 
OUTER APPLY (
    select top 1 
      Date 
     ,Price 
    from table3 
    WHERE ID = T1.Id AND product = T1.Product-- plus any other joins 
    ORDER BY Date desc 
) as T3 
+0

謝謝。我會試試看! – HEki

+0

對不起HEKi。我有這個錯誤。我使用SQL Server並且錯過了您的帖子上的MySQL標籤。 MySQL不支持CROSS APPLY 我試圖幫助,但我很抱歉,我可能導致你誤入歧途。 –