【发布时间】:2019-03-12 05:04:53
【问题描述】:
谁能帮我解决这个问题。我有一张包含 Products、ProductsSales 的表。这是他们的一些截图。
现在我想做一个 TSQL 查询,可以对它们进行分组并添加类似“标题描述”的内容? 像这样的
如果它是一个相对动态的查询,那就完美了。
有人可以在这里帮助我或给我一些提示吗?
【问题讨论】:
标签: sql sql-server tsql
谁能帮我解决这个问题。我有一张包含 Products、ProductsSales 的表。这是他们的一些截图。
现在我想做一个 TSQL 查询,可以对它们进行分组并添加类似“标题描述”的内容? 像这样的
如果它是一个相对动态的查询,那就完美了。
有人可以在这里帮助我或给我一些提示吗?
【问题讨论】:
标签: sql sql-server tsql
试试这个:
SELECT DISTINCT A.ProductName, B.Price
FROM Product A
INNER JOIN Product_Sales B ON A.ProductId = B.ProductId
GROUP BY ProductName, Price
【讨论】:
您可以在 SQL Server 中使用 GROUP BY 和 GROUPING 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 ), ( ) )
输出
+------------+-------+
| GroupName | price |
+------------+-------+
| fruit | 14 |
+------------+-------+
| vegetables | 52 |
+------------+-------+
| food | 66 |
+------------+-------+
| Apple | 5 |
+------------+-------+
| Capsicum | 35 |
+------------+-------+
| Cucumber | 17 |
+------------+-------+
| Orange | 9 |
+------------+-------+
【讨论】:
我倾向于取消透视类别然后聚合:
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;
【讨论】: