2012-12-14 208 views
0

當我運行下面的書面程序,返回的結果集,我得到的是像合併兩行成一個

My Result Set

Result Set 2 但實際上根據的情況下,我想那是什麼我想針對@ContractId參數的單個記錄。所以,我想合併結果集返回的行。

PS:該圖片只顯示少量列,還有一些其他列有不同的值。

這是我的程序:

ALTER PROCEDURE [dbo].[sp_Tbl_Contract_SearchOne] 
    -- Add the parameters for the stored procedure here 
    @ContractID int 
AS 
BEGIN 

    select 
    tbl_Contract.ContractID, 
    KeyWinCountNumber, 
    ItemName, 
    BrandName, 
    CountName, 
    SellerName, 
    BuyerName, 
    ContractNumber, 
    ContractDate, 
    CountryFromName, 
    CountryToName, 
    TotalQty, 
    Vans, 
    UnitPrice, 
    Amount 
    from tbl_Contract 

    inner join tbl_CountDetail 
    on 
    tbl_CountDetail.ContractID = Tbl_Contract.ContractID 
    inner join tbl_Count tcount 
    on 
    tcount.CountID = tbl_CountDetail.CountID 
    INNER JOIN Tbl_Item 
    on Tbl_Contract.ItemID = Tbl_Item.ItemID 
    INNER JOIN Tbl_Brand 
    on Tbl_Contract.BrandID = Tbl_Brand.BrandID 
    INNER JOIN Tbl_Seller 
    on Tbl_Contract.SellerID = Tbl_Seller.SellerID 
    INNER JOIN Tbl_Buyer 
    on Tbl_Contract.BuyerID = Tbl_Buyer.BuyerID 
    INNER JOIN Tbl_CountryFrom 
    ON Tbl_Contract.CountryFromID=Tbl_CountryFrom.CountryFromID 
    INNER JOIN Tbl_CountryTo 
    ON Tbl_Contract.CountryToID = Tbl_CountryTo.CountryToID 
    inner join tbl_CostUnit 
    on Tbl_Contract.CostUnitID = tbl_CostUnit.CostUnitID  
    where Tbl_Contract.ContractID = 1 
    and Tbl_Contract.IsDeleted = 0 and tbl_CountDetail.IsDeleted = 0 
END 
+1

這個問題讓我困惑。你想選擇這兩行的合併嗎?你是否想用這些行生成輸出來更新各種表格?它有點令人困惑 – cjds

+0

我其實想要合併這兩行。 –

+0

但你想如何合併它們?唯一不同的字段是CountName,它是一個不是整數的字符串。你想如何聚合它?你想要輸出什麼? – cjds

回答

1

這取決於你想用CountName場(兩者之間的不同之處只值)做什麼,但在理論上你可以只是把它通過使用GROUP BY聚集(如果你排除了CountName),或者如果你想包含CountName,那麼可能PIVOT將完成這項工作。

1

這屬於聚合,通常聚合意味着要對要壓縮到單個行中的行進行操作(總和,平均值,標準偏差)。例如,如果你的數據包括關閉每人每天餅乾銷售的數量:

day person sales 
====================== 
1  Bob  5 
1  Jane  8 
2  Bob  2 
2  Jane  10 

你想看到在所有天什麼每人的銷售總額,你會選擇personsum(sales)分組由人

select 
    person 
    sum(sales) 
from salesData 
group by person 

你的情況有點不太標準,因爲你試圖聚合一個字符或字母數字的字段。這很好,因爲有一些聚合可以用於字符字段。 MIN將仍然有效,因爲將會分別返回第一個和最後一個字段MAX

即做一個min超過設定abc將返回a,因爲它是第一個(最小的字符串排序規則排序)。你似乎有一些其他的數字字段(AmountUnitPriceTotalQty) - 這些,你可以選擇正確的聚集的 - 我懷疑SUM是最有可能

所以,你可以這樣做:

select 
    tbl_Contract.ContractID, 
    KeyWinCountNumber, 
    ItemName, 
    BrandName, 
    MIN(CountName) as FirstCountName, 
    SellerName, 
    BuyerName, 
    ContractNumber, 
    ContractDate, 
    CountryFromName, 
    CountryToName, 
    SUM(TotalQty) AS SumTotalQuantity, 
    Vans, 
    SUM(UnitPrice) as TotalUnitPrice, 
    SUM(Amount) AS TotalAmount 
    from tbl_Contract 
     [...snip...] 
    group by tbl_Contract.ContractID, 
    KeyWinCountNumber, 
    ItemName, 
    BrandName, 
    SellerName, 
    BuyerName, 
    ContractNumber, 
    ContractDate, 
    CountryFromName, 
    CountryToName, 
    Vans 

這將現在返回1行,其中FirstCountName的值爲Count1 502,因爲這是來自聚合字段的第一個(最小)值。