2

OK、SQL から取得する必要があるものを 1 つの件名行で説明するのはちょっと難しいです。この話題で多くの人が背を向けないことを願っています...

2 つのテーブルがあり、1 つには出荷 ID、追跡番号、および送料が含まれています。

Declare @ship as table
(
    shipID varChar(25),
    TrkID VarChar(50),
    shp_Cost money
)

Insert into @ship Values('1000000058','075637240645964',13.1900)
Insert into @ship Values('1000000077','075637240646671',10.3300)
Insert into @ship Values('1000000078','075637240646695',12.8300)
Insert into @ship Values('1000000079','075637240646725',11.2100)

これには 1 対多の関係があり、これは 1 つの出荷ですが、多くの項目が含まれる場合があります。2 番目のテーブルには項目があり、デモ用に次のように表示されます...

Declare @ship_2 as table
(
    shipID VarChar(25),
    trkID VarChar(50),
    Item_SKU VarChar(50),
    Ship_Quantity int
)

Insert into @ship_2 Values('1000000058','075637240645964','P025.3',25)
Insert into @ship_2 Values('1000000058','075637240645964','P100.1',25)
Insert into @ship_2 Values('1000000058','075637240645964','P21.1',25)
Insert into @ship_2 Values('1000000058','075637240645964','P024',25)
Insert into @ship_2 Values('1000000058','075637240645964','A-P927',25)
Insert into @ship_2 Values('1000000058','075637240645964','PBC',500)
Insert into @ship_2 Values('1000000077','075637240646671','P213.99',25)
Insert into @ship_2 Values('1000000077','075637240646671','P029',25)
Insert into @ship_2 Values('1000000077','075637240646671','P-05.3',25)
Insert into @ship_2 Values('1000000078','075637240646695','P0006.1',25)
Insert into @ship_2 Values('1000000078','075637240646695','P01.67-US',25)
Insert into @ship_2 Values('1000000078','075637240646695','P09.1',25)
Insert into @ship_2 Values('1000000078','075637240646695','P022.1',25)
Insert into @ship_2 Values('1000000078','075637240646695','P08.3',25)
Insert into @ship_2 Values('1000000079','075637240646725','P02',25)
Insert into @ship_2 Values('1000000079','075637240646725','P0006.1',25)
Insert into @ship_2 Values('1000000079','075637240646725','P1.4',25)

したがって、2 つのテーブルを結合し、送料の詳細を提供して、1 つの結果セットに送料を含める方法が必要です。項目の 1 つだけが送料を負担する必要があると考えるまでは、実際には問題ではありません。項目が 6 つある場合、最初の項目の送料のみを返し、残りの 5 行の送料を 0 にする必要があります。

私は現在、これをどのように達成できるかについて完全に途方に暮れています。それはすべてストアド プロシージャにあり、一時テーブルを作成したり、必要に応じてテーブルを宣言したりできます。

誰でも私が探す必要があるものについて提案があります。

あなたが提供できる私たちのガイダンスを助けてくれてありがとう。

ティム

4

1 に答える 1

3

これに CTE を使用しない理由:

;with cte as
(
    select s.shipID, 
        s.TrkID, 
        s.shp_Cost, 
        s2.Item_SKU, 
        s2.Ship_Quantity, 
        ROW_NUMBER() over(PARTITION by s.shipid order by s.shipid) rn
    from @ship s
    inner join @ship_2 s2
        on s.shipID = s2.shipID
)
select shipID, 
    TrkID, 
    case when rn = 1 then shp_Cost else 0 end shp_cost,
    Item_SKU,
    Ship_Quantity
from cte

デモで SQL Fiddle を参照してください

于 2012-08-13T18:59:36.070 に答える