【发布时间】:2018-12-19 18:09:10
【问题描述】:
我已经完成了一些表连接,下面是我的数据的外观。
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
我正在使用下面的代码来实现这一点,它似乎正在工作。但由于我有 4800 万条记录,运行它需要很长时间。有没有办法优化这个查询?
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
【问题讨论】:
-
使用 EXISTS 几乎肯定会获得更好的性能,但性能可能与连接到视图或执行 SELECT 中的查询的子查询一样好
-
我确实尝试过使用 EXISTS,但不知何故它给出了不正确的结果。它肯定跑得更快。
标签: sql sql-server case