【发布时间】:2021-10-11 06:25:30
【问题描述】:
我有两张桌子:(A) 健身房的顾客和 (B) 餐厅的顾客。我想在表 (A) 中创建一个指标来指示同一天去过健身房和餐厅的顾客。为此,我使用了以下 SQL 脚本,但它创建了重复的行:
SELECT *,
CASE WHEN a.GymDate = b.RestaurantDate THEN 'Meal + Gym on the same day'
ELSE 'Gym Only' END AS 'Meal+Gym'
FROM Table_A a
LEFT JOIN Table_B b
ON a.customerid = b.customerid;
我可以知道如何只保留 Table_A,但添加了“膳食+健身房”指示器吗?谢谢!
【问题讨论】:
-
请显示样本数据和所需结果。您有单独的客户表吗?此外,您的描述和查询返回不同的结果。如果某天一个客户同时去,而某天一个客户只去一个怎么办?
-
它创建了重复的行 - 它更可能是创建重复行的连接,而不是 CASE WHEN。如果 a 中有 2 行 ID 为 1,B 中有 2 行 ID 为 1,则您将获得 4 行。如果通过“创建重复”你的意思是 CASE WHEN 将一些值隐藏到它的 ELSE 中导致行看起来像重复,那是你真正需要用 WHERE 控制的东西
-
A
CASE不会创建行,它只是一个标量表达式。就像如果你有一个像YourColumn + OtherColumn这样的表达式不会创建新行。如果您的FROM和WHERE要求数据集中有哪些行。
标签: sql sql-server join duplicates case