SQL Server将一行添加到另一行,但仅限于一个列

3

可能最好通过下面的图片理解。

我左边有一个表格,但我想要右边的表格。我想将任何共享参考编号的项目相加,而不需要将表格编号列相加。我的SQL语句形式为

SELECT

[Order Reference]
,[Item Price]
,[Table Number]

From Orders

我相信我需要从第二个SELECT语句中选择,该语句对项目价格进行求和,但是我无法获得关于在不将表格数字相加的情况下对订单引用进行求和的确切语法。
编辑:
我认为我遗漏了第一个回答者所需的重要信息。而且我显然搞错了示例数据。表格具有其他列,我没有在查询中包含它们,因此当我尝试按组合并时,仍会获得多个行。我想隔离特定列并合并行,而忽略任何不同的列(我不介意选择其他列的哪些数据)
因此为了清晰起见(希望如此),该表还有20个其他列,例如是否折扣,我基本上想忽略它们,但似乎这些列防止了从简单的group by子句中合并行。

enter image description here


我们如何决定保留哪个“表编号”?是最高的吗?(在回答“第一个”之前,请明确表格没有固有的排序,因此如果您说“第一个”,还必须说明根据列值可以确定第一个的标准)。 - Damien_The_Unbeliever
同一参考编号的表格编号始终相同,请保留任何表格编号。 - tomdemaine
你的样本数据与你的观点相矛盾。 - Damien_The_Unbeliever
哎呀,确实是这样。抱歉,需要更改以避免混淆。 - tomdemaine
4个回答

1
你需要使用SUM()函数对项目进行求和,并通过你想要的唯一值对结果进行GROUP BY分组。
SELECT [Order Reference],
       SUM(PRICE) as 'Items Total',           
       [Table Number] as 'Table Number'
FROM Orders
Group By [Order Reference], [Table Number]

注意:
使用 聚合函数(如SUM、MAX等)时,必须将要在SELECT语句中显示的每一列都进行分组。

1
[tag:sql-server] 不允许在 SELECT 子句中使用 TableNumber,除非它是分组列或包含在聚合函数中。 - Damien_The_Unbeliever

1
尝试使用此查询来找到您的答案。
SELECT Order_Reference, SUM(Item_Price) AS 'Total_Item', Table_Number 
FROM Your_Table_Name
GROUP BY Order_Reference,Table_Number 
ORDER BY Order_Reference ASC;

0


使用以下查询以获得预期结果

SELECT ORDER_REFERENCE, SUM(ITEM_PRICE) AS ITEMS_TOTAL, TABLE_NUMBER FROM TABLE_NAME
GROUP BY ORDER_REFERENCE, TABLE_NUMBER  ORDER BY TABLE_NUMBER;

根据示例数据,这仍将生成两个“AT44T”行。 - Damien_The_Unbeliever
在这种情况下,应该忽略TABLE_NUMBER,否则在分组时会得到两个结果。 - Jim Macaulay

0
为什么不在两个列OrderReferenceTableNumber上使用Order By子句。
您可以使用以下查询,但这将与您显示的结果表相矛盾,因为一个OrderReference将产生两个输出,因为TableNumber不同。
SELECT orderreference, 
       Sum(itemprice) AS ItemTotal, 
       tablenumber 
FROM   so_orders 
GROUP  BY orderreference, 
          tablenumber 
ORDER  BY orderreference 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接