2012-08-13 73 views
2

OK,這是一種很難形容我需要走出SQL的在一個單一的主題行。我希望對象不轉走太多的人...T-SQL查詢,將兩個表,但只有從表1中的第二個表返回數據,1行

我有兩個表,一個具有船舶標識,跟蹤號和運費。

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:很多的關係,這是一個貨件,但它可能有許多行項目。第二個表具有行項目和演示的原因,看起來像這樣...

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) 

所以我需要的是加入了兩個表,並提供送貨細節,包括航運的成本的方式一個結果集。直到您認爲只有其中一個訂單項需要承擔運費的成本之後,纔會出現問題。如果有6個訂單項,我只需要返回第一個訂單項的運費和剩餘5行的0。

我目前的我怎麼能在瞬間完成這一完全喪失。它將全部在一個存儲過程中,我可以根據需要創建臨時表或聲明表。

任何一個有什麼我需要尋找的建議。

感謝所有幫助我們的指導,你可以提供。

+0

SQL服務器的什麼版本? – Taryn 2012-08-13 18:52:36

+0

Whoopss ... SQL Server 2008 R2 – 2012-08-13 18:54:34

回答

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 with Demo

+0

這工作得很好!謝謝!現在我正在前往瞭解更多關於CTE的知識,以及我可以在哪裏使用它。 – 2012-08-13 19:23:52

相關問題