在查询中将特定行添加在一起

时间:2019-07-29 19:05:10

标签: sql sql-server

我正在尝试编写一个查询,以显示产品线中所有物品的总销售额。对于其中一些项目,只需要一行即可返回答案。对于其他情况,需要将两行或更多行加在一起以获得正确的值。问题在于某些项目的项目ID并不表示它们应该一起使用(项目ID 1030、1031、5032和1033可能一起使用)。我没有专栏可以对它们进行分组,因此我认为我将需要手工完成。

是否在同一列中将特定值加在一起?

这是我在说什么的一个小例子。在第一列中,我具有该项目的ID,第二列中包含该值。我需要将同一产品系列中的行的值加在一起。不幸的是,Item ID有时只是相似的,而其他时候ID却与其他ID不匹配。

https://imgur.com/GwydiDK

2 个答案:

答案 0 :(得分:1)

您应该添加与产品线相关的第二张表,将其加入到销售表中,并在[已售价值]列上进行求和。这是一个SQL Server示例,以及SQL ServerMySQL的小提琴。

CREATE TABLE ProductLines ([Item ID] INT, [Product Line #] INT);
INSERT INTO ProductLines VALUES 
(1010, 1),
(1011, 1),
(1012, 1),
(1020, 2),
(1030, 3),
(1031, 3),
(5032, 3),
(1033, 3),
(1040, 4),
(7041, 4),
(2040, 1);

SELECT [ProductLines].[Product Line #], SUM([Value of Sold]) AS [Total Sold]
FROM dbo.Sales 
INNER JOIN ProductLines ON [ProductLines].[Item ID] = Sales.[Item ID]
GROUP BY [Product Line #]

返回:

Product Line # Total Sold
-------------- -----------
1              54
2              9
3              42
4              10

编辑:由于您没有创建表的权限,因此请查看是否可以创建表变量而不是保留表:

DECLARE @ProductLines TABLE ([Item ID] INT, [Product Line #] INT)
INSERT INTO @ProductLines VALUES 
(1010, 1),
(1011, 1),
(1012, 1),
(1020, 2),
(1030, 3),
(1031, 3),
(5032, 3),
(1033, 3),
(1040, 4),
(7041, 4),
(2040, 1);

SELECT ProductLines.[Product Line #], SUM([Value of Sold]) AS [Total Sold]
FROM dbo.Sales 
INNER JOIN @ProductLines ProductLines ON ProductLines.[Item ID] = Sales.[Item ID]
GROUP BY [Product Line #]

答案 1 :(得分:0)

假设一个名为sales且表名为'SaleID , 'ItemID' and ValueOfSale and another table called 'ProductDetails且表名为ItemIDProductDescription的表,则可能会解决您的问题。

SELECT
   ItemID, 
   SUM(ValueOfSale),
   ISNULL(ProductDescription, '') AS [Product Description]
FROM
   sales AS SA 
   LEFT JOIN ProductDetails AS PD
    ON SA.ItemID = PD.ItemID
GROUP BY
    ItemID, ProductDescription

这未经测试。