【问题标题】:SQL Server Adding one row to another but only for one columnSQL Server将一行添加到另一行但仅用于一列
【发布时间】:2017-05-16 09:02:11
【问题描述】:

大概看下图就明白了。

。我想将共享参考编号的所有项目而不加起来表编号列。我的 SQL 格式为

SELECT

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

From Orders

我很确定我需要从对项目价格求和的第二个 SELECT 中进行 SELECT,但是如果不对表编号进行求和,我就无法获得对订单参考求和的确切语法。

编辑:

我想我遗漏了第一个回答者的重要信息。我显然搞砸了样本数据。许多道歉。该表还有我的查询中没有包含的其他列,所以当我尝试 group by 时,我仍然会得到多行。我想隔离特定列并合并行而不考虑任何不同的列(我不介意选择其他列的哪些数据)

因此,为了清楚起见(希望如此),该表还有 20 个其他列,例如 discount yes 或 no,我基本上想忽略它们,但它们似乎阻止了行从简单的 group by 子句合并在一起。

【问题讨论】:

  • 我们如何决定保留哪个Table Number?是最高的吗? (在回答“第一”之前,请明确表没有固有顺序,因此如果您说“第一”,您还必须说出我们可以通过什么标准根据列值确定第一个)。
  • 对于相同的参考编号,表编号将始终相同,因此请保留任何编号。
  • 您的样本数据与您相矛盾。
  • 糟糕,确实如此。抱歉,需要更改它以避免混淆。

标签: sql sql-server


【解决方案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;

【讨论】:

    【解决方案2】:

    您需要 SUM() 向上的项目和 GROUP 您的结果 BY 您的(所需的唯一)值。

    SELECT [Order Reference],
           SUM(PRICE) as 'Items Total',           
           [Table Number] as 'Table Number'
    FROM Orders
    Group By [Order Reference], [Table Number]
    

    注意:

    使用aggregate functions(例如SUMMAX 和其他人)时,您必须按要在SELECT 中显示的每一列进行分组。

    【讨论】:

    • sql-server 不允许在 SELECT 子句中使用 TableNumber,除非它是分组列或包含在聚合中。
    【解决方案3】:


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

    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 行。
    • 在这种情况下,应该忽略 TABLE_NUMBER,否则在分组时会给出两个结果
    【解决方案4】:

    为什么不对OrderReferenceTableNumber 两列使用Order By 子句。

    您可以使用以下查询,但这将与您显示的结果表相矛盾,因为一个 OrderReference 将产生两个输出,因为 TableNumber 是不同的。

    SELECT orderreference, 
           Sum(itemprice) AS ItemTotal, 
           tablenumber 
    FROM   so_orders 
    GROUP  BY orderreference, 
              tablenumber 
    ORDER  BY orderreference 
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2020-09-30
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多