gpt4 book ai didi

sql - 将行拆分为多行

转载 作者:行者123 更新时间:2023-12-04 19:34:54 26 4
gpt4 key购买 nike

我有这张表:

+---------+------+---------+
| Col1 | Col2 | Col3 |
+---------+------+---------+
| PersonA | $10 | PersonB |
| PersonC | $20 | PersonD |
+---------+------+---------+

我想要这样的结果:

+---------+-----+-----+
| Col1 | Db | Cr |
+---------+-----+-----+
| PersonA | 0 | $10 |
| PersonB | $10 | 0 |
| PersonC | 0 | $20 |
| PersonD | $20 | 0 |
+---------+-----+-----+

有没有不用Union all的方法?

最佳答案

如果 col1 代表 CR,col3 代表 DB,您可以使用 UNION ALL 如下所示获得所需的输出-

SELECT col1 PersonName, 
'$0' DB,
col2 CR
FROM your_table

UNION ALL

SELECT col3 PersonName,
col2 DB,
'$0' CR
FROM your_table

要保持交易顺序不变,需要先创建ROW_NUMBER,然后按RN排序。 ROW_NUMBER 的创建在不同的数据库中是不同的。由于您没有提到数据库名称,因此我无法在此处添加该逻辑。

当您正在寻找避免 UNION ALL 时,如果您使用的是 MSSQL,则可以考虑如下所示的 UNPIVOT-

WITH CTE AS
(
SELECT U.PersonName,
CASE WHEN U.name = 'Col3' THEN U.Col2 ELSE '$0' END AS Db,
CASE WHEN U.name = 'Col1' THEN U.Col2 ELSE '$0' END AS Cr,
U.name ValuesFromColumn -- Just print this for better understanding
FROM your_table S
UNPIVOT
(
PersonName
FOR NAME IN (col1,col3)
) U
)

-- Now select from CTE and Join other table as

SELECT *
FROM CTE A
LEFT JOIN Other_Table B ON....

-- OR Like

SELECT *
FROM Other_Table A
LEFT JOIN CTE B ON....

UNPIVOT 在其他数据库中也可用。如果您使用其他数据库,您可以相应地调整语法。

关于sql - 将行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57439167/

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