gpt4 book ai didi

sql - 使每隔一行的值出现在新的第三列中

转载 作者:行者123 更新时间:2023-12-02 17:24:13 24 4
gpt4 key购买 nike

假设我的数据如下所示:每隔一行代表保存历史数据的表中的旧值(先前值)。

表 1:

id     value
------------
1 a
1 b
2 c
2 d
3 a
3 b

并且我希望每隔一行的值出现在新的第 3 列中,如下所示:

表 2:

id    new_value    old_value
------------------------
1 a b
2 c d
3 a b

编辑:为了清楚起见,我发布了生成我想要转换的数据的查询框架(所以很明显我已经在使用 WITH 所以不能使用额外的一个,因为 oracle 还不允许嵌套 WITH元素):

在表 1 中生成数据的骨架代码:

with candidates as 
(
--select list of candidates
)
SELECT * FROM
(
(
--select new values
MINUS
--select old values
)
UNION
(
--select old values
MINUS
--select new values
)
)
ORDER BY id;

目标是最终只获得一个 id 列表,这些 id 的旧值和新值都发生了变化。

提前致谢。

最佳答案

使用 CTE

;WITH CTE AS(

SELECT *, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) RN
FROM TableName
)
SELECT ID,
MIN(CASE WHEN RN=1 THEN [value] END) NewValue,
MIN(CASE WHEN RN=2 THEN [value] END) OldValue
FROM CTE
GROUP BY ID

关于sql - 使每隔一行的值出现在新的第三列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com