Sql 将多行折叠为一行
在SQLServer中,我需要根据一列的ID将多行折叠成一行。例如:Sql 将多行折叠为一行,sql,sql-server,Sql,Sql Server,在SQLServer中,我需要根据一列的ID将多行折叠成一行。例如: +-----------+-----------+ | objectIdA | objectIdB | +-----------+-----------+ | 1 | A | | 1 | B | | 1 | D | | 5 | F | | 5 | L | |
+-----------+-----------+
| 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,因为这两列都应该是输出的一部分