文|杨小妹一二一
最近好忙好累,天天加班🤪
不过自己也好厉害,硬挤时间看完了三本书,《人间旅馆》《重生》《疯探》
太少了,公众号文章,这个月只写了三篇🤪
体力活交给AI帮忙干干🤪
不会写的sql,让AI帮我写写🤪
下班那会被一个问题困扰着,在地铁上,写好问题和诉求,AI分分钟给答案。
明天还要去加班,顺便验证一下AI给的答案正确不🤪
我在这碎碎念了一会,才感觉自己是自己,不只是牛马,也不只是一台机器,原来我还会写写自己喜欢的文字。
问题描述:
applyId Je rq
S A1 2025-10-11
S A2 2025-10-12
S A3 2025-10-13
诉求:
oracle处理数据,按照Applyid分组,将数据封装成一行,分别有Je1,Je2,Je3,rq1,rq2,rq3
回答:
在 Oracle 数据库中,可以使用 PIVOT 操作符(Oracle 11g 及以上版本)来实现您想要的效果。由于您需要将 Je 和 rq 两个字段都进行行转列,并且按日期 (rq) 排序后分配序号,我们需要先使用分析函数 ROW_NUMBER() 为每一行生成一个序号,然后再进行透视。
SELECT
applyId,
MAX(CASE WHEN rn = 1 THEN Je END) AS Je1,
MAX(CASE WHEN rn = 2 THEN Je END) AS Je2,
MAX(CASE WHEN rn = 3 THEN Je END) AS Je3,
MAX(CASE WHEN rn = 1 THEN rq END) AS rq1,
MAX(CASE WHEN rn = 2 THEN rq END) AS rq2,
MAX(CASE WHEN rn = 3 THEN rq END) AS rq3
FROM (
SELECT
applyId,
Je,
rq,
ROW_NUMBER() OVER (PARTITION BY applyId ORDER BY rq) AS rn
FROM your_table_name -- 请将 your_table_name 替换为您的实际表名
) t
GROUP BY applyId;