【问题标题】:SQL Server - Concatenate ID field while using group by [duplicate]SQL Server - 使用group by时连接ID字段[重复]
【发布时间】:2020-08-20 17:28:59
【问题描述】:

我目前正在为包含产品信息的表开发一些关联挖掘。简单地说,核心表基本上是这样的:

我目前正在按产品分组并计算不同交易 ID 的总数,以查看特定产品属于多少交易。然后将表格变成这样:

我的问题是,一旦我进行分组,有没有办法在不摆脱分组的情况下提取实际的交易 ID?也许是一种将 ID 连接到另一列的方法,所以它看起来像这样:

绝对愿意接受有关如何恢复原始 ID 的其他建议。谢谢!

【问题讨论】:

标签: sql sql-server


【解决方案1】:

SQL Server 2016+

SELECT 
    product
   ,count([transaction id])  as [count of transaction id]
   ,STRING_AGG(ID,',') as IDs
FROM YourTable
GROUP BY product

【讨论】:

    【解决方案2】:

    你可以试试这个。 DBFIDDLE

    SELECT a.Product
        ,a.[count of transactions]
        ,SUBSTRING(a.all_transactions, 0, LEN(a.all_transactions)) [IDs]
    FROM (
        SELECT Product
            ,COUNT(DISTINCT TransactionId) [count of transactions]
            ,(
                SELECT DISTINCT CAST(TransactionId AS VARCHAR(10)) + ',' [text()]
                FROM dbo.Products inner_p
                WHERE inner_p.Product = Products.Product
                --GROUP BY inner_p.Product
                FOR XML PATH('')
                    ,TYPE
                ).value('.', 'NVARCHAR(MAX)') [all_transactions]
        FROM dbo.Products
        GROUP BY Product
        ) a
    

    输出:

    【讨论】:

    • 嗨 Sowmyadhar,这完成了单一产品组合的工作!我想知道是否也可以对双重产品组合遵循这种逻辑?因此,同时具有苹果和橙子的交易总数以及同时包含两者的 ID。希望这是有道理的。
    • 我不明白双产品组合,你能用示例更新你的问题吗?
    猜你喜欢
    • 2012-04-22
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多