Sql 合并第一行和第二行、第三行和第四行,依此类推
假设我有一张有行的桌子Sql 合并第一行和第二行、第三行和第四行,依此类推,sql,sql-server-2005,Sql,Sql Server 2005,假设我有一张有行的桌子 Id Value ---------- 1 a 1 b 1 c 1 d 1 e 1 f 而预期的结果应该是, Id Value1 Value2 ------------------- 1 a b 1 c d 1 e f 我在这里很困惑。好的,肯定有一种更简单的方法可以做到这一点,但这是可行的: WITH CTE AS ( SELECT *,
Id Value
----------
1 a
1 b
1 c
1 d
1 e
1 f
而预期的结果应该是,
Id Value1 Value2
-------------------
1 a b
1 c d
1 e f
我在这里很困惑。好的,肯定有一种更简单的方法可以做到这一点,但这是可行的:
WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Value)
FROM dbo.YourTable
)
SELECT Id,
MIN(CASE WHEN RN % 2 = 1 THEN Value END) Value1,
MIN(CASE WHEN RN % 2 = 0 THEN Value END) Value2
FROM CTE
GROUP BY Id,
RN - ((RN - 1) % 2);
结果是:
╔════╦════════╦════════╗
║ Id ║ Value1 ║ Value2 ║
╠════╬════════╬════════╣
║ 1 ║ a ║ b ║
║ 1 ║ c ║ d ║
║ 1 ║ e ║ f ║
╚════╩════════╩════════╝
好的,肯定有一种更简单的方法,但这是可行的:
WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Value)
FROM dbo.YourTable
)
SELECT Id,
MIN(CASE WHEN RN % 2 = 1 THEN Value END) Value1,
MIN(CASE WHEN RN % 2 = 0 THEN Value END) Value2
FROM CTE
GROUP BY Id,
RN - ((RN - 1) % 2);
结果是:
╔════╦════════╦════════╗
║ Id ║ Value1 ║ Value2 ║
╠════╬════════╬════════╣
║ 1 ║ a ║ b ║
║ 1 ║ c ║ d ║
║ 1 ║ e ║ f ║
╚════╩════════╩════════╝
这些行应该按某物排序。价值?@DuduMarkovitz是的,不正确。那么订单的标准是什么呢?。如果
ID
更改了值,会发生什么情况?@Lamak我的ID=SomeValuealways@DuduMarkovitz否,行号可从SQL Server 2005获得。行应按某种方式排序。价值?@DuduMarkovitz是的,不正确。那么订单的标准是什么呢?。如果ID
更改了值,会发生什么情况?@Lamak我的ID=SomeValuealways@DuduMarkovitz不,行号可从SQL Server 2005中获得,按Id分组,(RN-1)/2略短。按Id分组,(RN-1)/2略短。