gpt4 book ai didi

sql - 在sqldf/R中的情况

转载 作者:行者123 更新时间:2023-12-03 17:52:16 27 4
gpt4 key购买 nike

如果我有DF

   A B  Col
1 1 A
2 2 B
1 2 C
2 1 D
1 3 E
2 3 F


我尝试如下使用sqldf

 Test <- sqldf("                SELECT A,
case when A = '1' and B = '1' then Col else NULL end as Test_1,
case when A = '1' and B = '2' then Col else NULL end as Test_2,
case when A = '1' and B = '3' then Col else NULL end as Test_3,
case when A = '2' and B = '1' then Col else NULL end as Test_4,
case when A = '2' and B = '2' then Col else NULL end as Test_5,
case when A = '2' and B = '3' then Col else NULL end as Test_6

FROM DF
group by A;")


但是,它仅针对每种情况A和其他列NULL返回结果,因此不是我想要的结果

A Test1 Test2 Test3 Test4 Test5 Test6
1 A C E Null NULL NULL
2 NULL NULL NULL D B F


每个A我只会得到一个结果

A Test1 Test2 Test3 Test4 Test5 Test6
1 G NULL NULL Null NULL NULL
2 NULL NULL NULL NULL B NULL


我在做什么错,有没有办法获取所需的格式?

最佳答案

在SQL中称为条件聚集(通常用于数据透视),因为@Gregor注释只是围绕MAX()语句运行像MIN()的聚集(即使CASE都可以工作):

SELECT A,
MAX(CASE WHEN A = '1' AND B = '1' THEN Col ELSE NULL END) as Test_1,
MAX(CASE WHEN A = '1' AND B = '2' THEN Col ELSE NULL END) as Test_2,
MAX(CASE WHEN A = '1' AND B = '3' THEN Col ELSE NULL END) as Test_3,
MAX(CASE WHEN A = '2' AND B = '1' THEN Col ELSE NULL END) as Test_4,
MAX(CASE WHEN A = '2' AND B = '2' THEN Col ELSE NULL END) as Test_5,
MAX(CASE WHEN A = '2' AND B = '3' THEN Col ELSE NULL END) as Test_6
FROM DF
GROUP BY A

关于sql - 在sqldf/R中的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864480/

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