2012-12-14 62 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,因为这是来自聚合字段的第一个(最小)值。