0

给定一个项目可以在多个仓库中的一对多,执行直接连接会返回重复的项目。我想将仓库表中的数据折叠成字符串,以便每个项目有一条记录。这可行,但是是否有更有效的方法可以避免执行 2 个单独的子选择/子查询?

SELECT
    im.ItemID,
    (SELECT WareHouseID + ',' 
        FROM stockStatusSummary WHERE ItemKey = im.ItemKey for xml path ('')) 
    as 'WarehouseIDs',
    (SELECT Convert(varchar(20), Round(QtyAvailable,3)) + ',' 
        FROM stockStatusSummary
        WHERE ItemKey = im.ItemKey for xml path (''))
    as 'WarehouseQuantity'
FROM item im

输出如下所示:

ItemID  WarehouseIDs  WarehouseQuantity
------- ------------- -----------------
1       10,20,30,      5,7,9,
2       20,30,40,      6,8,10,
3       30,40,50,      7,9,11,
4

1 回答 1

1

不经过测试,真的不会有一种方法具有金边。您可以尝试不同的方法,看看是否值得您花时间。我可能会从标量 udf 方法开始,看看它是否值得。还要确保订购您的数据,以便结果一致。

您可以在此处找到更多详细信息,http://jahaines.blogspot.in/2009/06/concatenating-column-values-part-1.html .. 这里有一些性能测试,http://jahaines.blogspot.in/ 2009/07/concatenating-column-values-part-2.html

编辑:我想补充一点,这可能最好在应用程序层甚至 CLR 中完成。最重要的是,这不是 SQL Server 的优势之一,您可能必须尝试一些方法来查看最适合您的环境的方法。如果您最关心易读性,则标量 udf 方法可能看起来最干净,但不一定是最具可扩展性的。

于 2013-07-10T21:03:01.087 回答