gpt4 book ai didi

sql - 使用 case 语句在 sql 查询中创建一个新列

转载 作者:行者123 更新时间:2023-12-04 02:53:55 27 4
gpt4 key购买 nike

我已经完成了一些表连接,下面是我的数据的样子。

Cust_No Account_No  Product_H_f Product_H_L
123 A9023 Core Training
123 A9023 Core Training
834 A9023 Core Complimentary
634 A9024 Core Complimentary
264 A9025 DTB Training
263 A9025 DTB Complimentary
677 A9025 DTB Training

我想在此结果中添加一个名为“接受培训的客户编号”的列,它应该如下所示。 (我的原始查询非常复杂,使用左连接连接 6 个表)

Cust_No Account_No  Product_H_f Product_H_L Cust_has_Training
123 A9023 Core Training Yes
123 A9023 Core Training Yes
834 A9023 Core Complimentary Yes
834 A9023 Core Training Yes
634 A9024 Core Complimentary No
264 A9025 DTB Training Yes
263 A9025 DTB Complimentary No
677 A9025 DTB Training Yes
677 A9025 DTB Basic Yes

我正在使用下面的代码来实现这一点,它似乎可以正常工作。但是因为我有 48M 条记录,所以要花很长时间才能运行。有什么方法可以优化这个查询吗?

SELECT Cust_No, 
Account_No,
Product_H_f,
Product_H_L,
(CASE WHEN Cust_No IN (SELECT distinct(Cust_No) from table where
Product_H_L='Training') then 'Yes' else 'No' end) as 'Cust_has_Training'
FROM TABLE

最佳答案

如果您有一个复杂的查询,添加这个新计算的最有效(也是最简单)的方法可能是基于Windowed Aggregates:

SELECT Cust_No, 
Account_No,
Product_H_f,
Product_H_L,
-- returns YES when any row for a customer has 'Training'
MAX(CASE WHEN Product_H_L='Training' THEN 'Yes' else 'No' end)
OVER (PARTITION BY Cust_No) as 'Cust_has_Training'
FROM TABLE

关于sql - 使用 case 语句在 sql 查询中创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53856966/

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