【问题标题】:Dynamically group by with "Group Header"使用“组标题”动态分组
【发布时间】:2019-03-12 05:04:53
【问题描述】:

谁能帮我解决这个问题。我有一张包含 Products、ProductsSales 的表。这是他们的一些截图。

现在我想做一个 TSQL 查询,可以对它们进行分组并添加类似“标题描述”的内容? 像这样的

如果它是一个相对动态的查询,那就完美了。

有人可以在这里帮助我或给我一些提示吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    试试这个:

    SELECT DISTINCT A.ProductName, B.Price 
    FROM Product A 
    INNER JOIN Product_Sales B ON A.ProductId = B.ProductId
    GROUP BY ProductName, Price
    

    【讨论】:

      【解决方案2】:

      您可以在 SQL Server 中使用 GROUP BYGROUPING SETS 来获得所需的输出。

      SELECT CASE 
               WHEN groupname IS NOT NULL THEN groupname 
               WHEN groupname IS NULL 
                    AND productname IS NULL THEN 'food' 
               ELSE productname 
             END          AS GroupName, 
             Sum(s.price) price 
      FROM   product p 
             INNER JOIN TableSales s 
                     ON p.productid = s.productid 
      GROUP  BY grouping sets( ( p.productname ), ( p.groupname ), ( ) ) 
      

      Online Demo

      输出

      +------------+-------+
      | GroupName  | price |
      +------------+-------+
      | fruit      | 14    |
      +------------+-------+
      | vegetables | 52    |
      +------------+-------+
      | food       | 66    |
      +------------+-------+
      | Apple      | 5     |
      +------------+-------+
      | Capsicum   | 35    |
      +------------+-------+
      | Cucumber   | 17    |
      +------------+-------+
      | Orange     | 9     |
      +------------+-------+
      

      【讨论】:

        【解决方案3】:

        我倾向于取消透视类别然后聚合:

        select which, name, sum(price)
        from products p cross apply
             (values ('productName', productName),
                     ('groupName', groupName),
                     ('parentGroup', parentGroup)
             ) v(which, name) left join
             productsales ps
             on ps.productId = p.productId
        group by which, name;
        

        【讨论】:

          猜你喜欢
          • 2019-08-01
          • 2012-11-22
          • 2017-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-23
          • 2011-09-23
          • 2022-01-17
          相关资源
          最近更新 更多