2016-12-21 16 views
0

2つのSQL文を結合する必要があり、両方の文はそれ自身で動作します。しかし、私は両方を1つのSQL文に結合する方法を知らない。複数のSELECT SQL文への結合(4つの表)

私は最初の声明に2つのテーブル、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' 

これは、30から06まで01-06-16から特定の時間枠での販売の価格、数量と日付で、私が販売するすべての製品のリストを返します。 -16。

今、最初のSQLステートメントの製品と発売日に基づいて、異なる2つのテーブル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

に参加するaswellありがとう!!!私は両方の例を試し、結果を報告します。 – 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 私は役に立ちたいと思っていましたが、私があなたを迷子に導いた可能性があることを謝ります。 –

関連する問題