有这么一个表
year name
2022 张三
2022 李四
2023 王五
2023 钱六
我想要显示成
year1 name1 year2 name2
2022 张三 2023 王五
2022 李四 2023 钱六
应该怎么写SQL呢?
参考GPT和自己的思路:您好,针对您的问题,您可以使用 PIVOT 将行转换为列,然后按照 year 进行分组,示例如下:
SELECT year1, name1, year2, name2 FROM
(SELECT year, name, ROW_NUMBER() OVER (PARTITION BY year ORDER BY name) AS row_num
FROM your_table) AS src
PIVOT
(
MAX(year) FOR row_num IN ([year1], [year2])
) AS pvt
PIVOT
(
MAX(name) FOR row_num IN ([name1], [name2])
) AS pvt2
GROUP BY year1, name1, year2, name2;
其中,your_table 是您要展示的表名,year1, name1, year2, name2 是新展示的列名。
对于您提供的示例数据,您可以使用以下的SQL语句实现所需的展示效果:
SELECT
t1.year AS year1,
t1.name AS name1,
t2.year AS year2,
t2.name AS name2
FROM
table_name t1
JOIN table_name t2
ON t1.id = t2.id AND t1.year <> t2.year
WHERE
t1.year < t2.year
ORDER BY
t1.year, t2.year;
其中,我们使用了一个自连接查询(self join)来将同一张表按照行进行合并,然后使用了条件语句 t1.year < t2.year
来排除重复的数据。最后使用了 ORDER BY t1.year, t2.year
来按照年份进行升序排序。
需要注意的是,您需要根据自己的实际表结构和数据类型进行修改。