2016-12-21 51 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 我试图帮助,但我很抱歉,我可能导致你误入歧途。 –