Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 合并第一行和第二行、第三行和第四行,依此类推_Sql_Sql Server 2005 - Fatal编程技术网

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略短。