2012-06-13 85 views
1

我有兩個表,即價格表(表A)和訂單記錄(表二)如何識別糾正行

表A

SKU Offer Date Amt 
AAA 20120115 22 
AAA 20120223 24 
AAA 20120331 25 
AAA 20120520 28 

表B

Customer SKU Order Date 
A001  AAA 20120201 
B001  AAA 20120410 
C001  AAA 20120531 

我必須根據訂單日期爲每個客戶檢索正確的價格。預期產量應該是這樣的: -

Customer SKU Order Date Amt 
A001  AAA 20120201 22 
B001  AAA 20120410 25 
C001  AAA 20120531 28 

謝謝。

+0

沒有。我不知道如何做日期範圍選擇。 – Bob

+2

你如何知道表A的哪一行與表B的哪一行一致? –

+0

你是如何產生預期結果的?我無法理解它背後的邏輯。你要加入哪兩個表的列? – manurajhada

回答

2

左連接(或NOT EXISTS子查詢)可用於確保兩個表之間的連接使用訂單日期或之前的價格表中的「最近」行。我認爲這是你想要達到的表之間的關係:

設置:

create table Prices (
    SKU char(3) not null, 
    OfferDate date not null, 
    Amt int not null 
) 
go 
insert into Prices (SKU, OfferDate, Amt) values 
('AAA','20120115', 22), 
('AAA','20120223', 24), 
('AAA','20120331', 25), 
('AAA','20120520', 28) 
go 
create table Orders (
    Customer char(4) not null, 
    SKU char(3) not null, 
    OrderDate date not null 
) 
go 
insert into Orders (Customer, SKU, OrderDate) values 
('A001','AAA','20120201'), 
('B001','AAA','20120410'), 
('C001','AAA','20120531') 
go 

查詢:

select 
    o.*, /* TODO - Explicit columns */ 
    p.Amt 
from 
    Orders o 
     inner join 
    Prices p 
     on 
      o.SKU = p.SKU and 
      o.OrderDate >= p.OfferDate 
     left join 
    Prices p_later 
     on 
      o.SKU = p_later.SKU and 
      o.OrderDate >= p_later.OfferDate and 
      p_later.OfferDate > p.OfferDate 
where 
    p_later.SKU is null 
+0

謝謝,它的作品。 – Bob

1

下一次,做忍耐你已經嘗試....

反正,這裏是你的答案!嘗試...

Select X.Customer , X.SKU , X.OrderDate , Y.Amt from B as X INNER JOIN A as Y ON X.Order Date= Y. Offer Date 

好運...

+0

就我所見,'OrderDate'值不一定與任何'OfferDate'值匹配。我還假定(儘管沒有在樣本數據中顯示),這些表格保存與多個「SKU」有關的信息。 –

+0

@Zoya,你怎麼知道所需的連接正在日期欄上應用?和'X.Order Date = Y. Offer Date'將產生所需的結果,因爲在這兩個表中沒有共同的日期? – manurajhada

+0

是的,對不起,我認爲它是一樣的... – Zoya

1
SELECT o.Customer, o.SKU, o.[Order Date], 
    (SELECT TOP 1 l.Amt 
    FROM PriceList l 
    WHERE l.[Offer Date] <= o.[Order Date] AND o.SKU = l.SKU 
    ORDER BY l.[Offer Date] DESC) AS Amount 
FROM 
Orders o 

有些事情可能會因數據庫支持