【问题标题】:Merge 2 rows into one row in SQL在 SQL 中将 2 行合并为一行
【发布时间】:2019-01-14 10:16:45
【问题描述】:

我正在尝试在 SQL Server 中将 2 行合并为 1 行。

这就是我所拥有的:

+---------------+-------+--------+
| Part Number   | Code  | value  |
+---------------+-------+--------+
|     1         |  00   |   12   |
|     1         |  01   |   21   |
+---------------+-------+--------+

这就是我想要的:

+---------------+-------+--------+
| Part Number   | Code  | value  |
+---------------+-------+--------+
|       1       |  00   |   33   |

我希望只剩下代码 00。

【问题讨论】:

  • 您想要Code 列中的第一条记录还是最小值?你试过什么?
  • 请在您的问题上付出更多努力,并详细说明您如何从源获得请求的结果+而不是描述您的表,您应该发布查询以创建表和查询以插入示例数据。
  • @bradbury9 我想要“代码”列中的第一条记录。
  • @RonenAriely 我想合并我的旧记录,分为 '00' 和 '01' ,都在一条记录 '00' 中。
  • 我不确定是否使用 row_number() over partition 或简单的 group by 提出答案。无论如何,这个问题很可能已经回答了

标签: c# sql tsql sql-server-2012


【解决方案1】:

你可以试试这样的:

SELECT [Part Number], MIN(Code), SUM(value)
FROM myTable
GROUP BY [Part Number]

【讨论】:

  • @EmanueleVerderame,没关系,因为 00 字符串在 01 字符串之前
  • 但我得到了这个错误:算术溢出错误将表达式转换为数据类型 int。警告:空值已被聚合或其他 SET 操作消除。感谢您的宝贵时间!
  • 您在表中有更多记录,并且这些记录中的一个在Codevalue 列中有NULL。如果 null 在 value 列中,您可以将 SUM 聚合函数更改为 SUM(isnull(value, 0))
【解决方案2】:

使用GROUP BY 子句

你可以试试

SELECT PartNumber, MIN(Code), SUM(value) FROM parts GROUP BY PartNumber

【讨论】:

  • @EmanueleVerderame,没关系,因为 00 字符串在 01 字符串之前
  • 它仍然可以工作,因为如果你把它整理出来,00 会在 01 之前出现
  • 但我得到了这个错误:算术溢出错误将表达式转换为数据类型 int。警告:空值已被聚合或其他 SET 操作消除。感谢您的宝贵时间!
【解决方案3】:

@EmanueleVerderame,这是下面的模型,向您展示如何防止错误。 似乎某些列,无论是 Code 还是 Value 都有 NULL/Blank 值。

DECLARE @parts TABLE (PartNumber INT, Code Char(2), Value INT)
INSERT INTO @parts
SELECT 1,'00', 12 UNION ALL
SELECT 1, '01', 21 UNION ALL
SELECT 2, NULL, 5
--+---------------+-------+--------+
--| Part Number   | Code  | value  |
--+---------------+-------+--------+
--|     1         |  00   |   12   |
--|     1         |  01   |   21   |
--|     2         |       |   5    |
--+---------------+-------+--------+

SELECT PartNumber, MIN(isnull(Code, '00') ), SUM(isnull(value, 0))  FROM 
@parts 
GROUP BY PartNumber

【讨论】:

  • 这几乎是我在问题中评论的本质,但是当我就这些空值提出建议时没有反馈。
【解决方案4】:

如果你只想显示第一个结果,那么你应该使用where rownum = 1

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多