1

Price List (Table A) と Order Record (Table B) という 2 つのテーブルがあります。

表 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

ありがとう。

4

3 に答える 3

2

左結合(またはNOT EXISTSサブクエリ)を使用して、2つのテーブル間の結合で、注文日以前の価格テーブルの「最新の」行が使用されるようにすることができます。これが、達成したいテーブル間の関係だと思います。

設定:

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
于 2012-06-13T06:02:34.533 に答える
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

データベースのサポートに基づいて、いくつかの点が異なる場合があります

于 2012-06-13T06:01:47.710 に答える
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

幸運を...

于 2012-06-13T05:59:48.140 に答える