Sql 将多行折叠为一行

Sql 将多行折叠为一行,sql,sql-server,Sql,Sql Server,在SQLServer中,我需要根据一列的ID将多行折叠成一行。例如: +-----------+-----------+ | objectIdA | objectIdB | +-----------+-----------+ | 1 | A | | 1 | B | | 1 | D | | 5 | F | | 5 | L | |

在SQLServer中,我需要根据一列的ID将多行折叠成一行。例如:

+-----------+-----------+
| objectIdA | objectIdB |
+-----------+-----------+
|         1 |         A |
|         1 |         B |
|         1 |         D |
|         5 |         F |
|         5 |         L |
|         7 |         C |
+-----------+-----------+
因此,结果将是:

+-----------+-----------+
| objectIdA | objectIdB |
+-----------+-----------+
|         1 |         A |
|         5 |         L |
|         7 |         C |
+-----------+-----------+

我不在乎折叠后返回的是哪一行,因为只有1行。

您可以使用分区覆盖。下面的查询将执行您想要的操作。如果愿意,可以通过调整顺序来精确检索第一条或最后一条记录

SELECT DISTINCT objectIdA
FROM your_table;
SELECT 
        t.objectIdA,
        t.objectIdB
    FROM (
      SELECT 
        raw.objectIdA,
        raw.objectIdB,
        rowid = ROW_NUMBER() OVER (PARTITION BY raw.objectIdA ORDER BY raw.objectIdA)
      FROM yourTable raw
    ) t
    WHERE rowid <= 1

Fiddle:

因为您不在乎返回哪一行

DECLARE @myTable TABLE (objectIdA int, objectIdB varchar(1));

INSERT INTO @myTable VALUES (1, 'A');
INSERT INTO @myTable VALUES (1, 'B');
INSERT INTO @myTable VALUES (1, 'D');
INSERT INTO @myTable VALUES (5, 'F');
INSERT INTO @myTable VALUES (5, 'L');
INSERT INTO @myTable VALUES (7, 'C');

SELECT objectIdA, MIN(objectIdB) AS objectIdB
 FROM @myTable
 GROUP BY objectIdA

可以使用编辑器面板中的标记或{}按钮缩进代码。为什么要这样做?可以将group by子句与min或max函数结合使用。就像在你的文章中一样。我正在尝试一种不同的方法来解决这个问题,因为看起来我无法从另一篇文章中获得解决方案。然后从表中选择objectIdA,maxobjectIdB a group by objectIdA not Work for you?。。嘿,这是基本的SQL!此处不能使用DISTINCT,因为这两列都应该是输出的一部分