1

私は2つのテーブルを持っています。TableAコストのある一連の製品がありTableB、日付に基づく一連の乗数があります。例えば:

TableA(キー:製品)

Product ID     Cost   Multiplier Code
ProductA       100    ABC
ProductB       200    DEF
ProductC       300    ABC
ProductD       400    JKL

TableB(キー:日付、コード)

Date        Code   Multiplier
01/01/12    ABC    100
01/01/12    DEF    200
01/01/12    GHI    300
01/01/12    JKL    400
16/03/12    ABC    300
20/06/12    ABC    900
15/05/12    DEF    700

望ましい結果:

TableA(キー:製品)

Product ID     Cost      Multiplier Code
ProductA       90000     ABC
ProductB       140000    DEF
ProductC       270000    ABC
ProductD       160000    JKL

私がやりたいのは、すべてをループするTableAと同時に、乗数を使用Cost列をTableB乗算するT-SQLスクリプトを作成することです。したがって、上記のProductAの例では、Costはになり100 x 900 = 90,000ます。

日付に基づいて最新の修飾子を使用する必要があるためTableB、修飾子として900を使用します。

これは可能ですか?

4

4 に答える 4

1

試す:

UPDATE  a
SET     Cost *= _b.Multiplier
FROM    a
JOIN    (
    SELECT  Code,
            Multiplier,
            ROW_NUMBER() OVER (PARTITION BY Code ORDER BY Date DESC) RowNum
    FROM    b
) _b ON _b.Code = a.Code AND _b.RowNum = 1
于 2012-06-20T10:07:49.397 に答える
0
select p.productid,
       p.cost * m.multiplier,
       p.multiplier_code
from tableA p
  join (
    select b1.multiplier, b1.code
    from tableB b1
    where b1.date = (select max(b2.date)
                     from tableB b2
                     where b2.code = b1.code)
  ) m on p.multiplier_code = m.code
于 2012-06-20T09:58:47.560 に答える
0
update TableA
set a.Cost = a.Cost * aux2.Multiplier
from TableA a
inner join 
(select b.Code, b.Multiplier from TableB b
 inner join
    (select max(Date) as 'Date', Code
    from TableB
    group by Code) aux on b.Date = aux.Date and b.Code = aux.Code
) aux2 on aux2.Code = a.MultiplierCode

aux指定されたコードの最大日付を取得します。 aux2の日付の乗数を取得しauxます。

于 2012-06-20T10:01:56.507 に答える
0

これを試して:

UPDATE Product 
SET COST = COST *
(
    SELECT TOP 1 Multiplier 
    FROM Date_Code 
    WHERE Product.MultiplierCode = Date_Code.Code
    ORDER BY CodeDate DESC
)
于 2012-06-20T10:21:26.690 に答える