【发布时间】:2016-10-13 20:38:37
【问题描述】:
我有 3 个数据扩展(数据表)
Subscription
CustomerInfo
Survey
所有三个表都有 CustomerId 作为字段。
以下是我的标准:
- 在下标的 Benfitids 中检查 B13 或 B26
- CustomerInfo 中的 EmailOptin 为 True
- 订阅中的 CreateDt 应超过 30 天并且
- 他们在调查表中具有以下条件:
QuestionId= 'purchaseIntentQuestion' 和 AnswerId = '3' 或
QuestionId='goldenQuestion' AND (AnswerId = '1' OR AnswerId = '2')
确保您没有重复的 Customerid 记录
我编写了以下查询,但它没有按预期返回结果。请指教
SELECT distinct sub.CustomerId, Cus.EmailOptin, srv.QuestionID,srv.AnswerId
FROM [Subscription] sub
JOIN [Survey Questions] srv ON sub.CustomerId = srv.CustomerId
JOIN [CustomerInfo] cus ON sub.CustomerId = cus.CustomerId
WHERE 1 = 1
AND CAST(sub.CreateDt AS DATE) < CAST(GETDATE() -30 AS DATE)
AND Cus.EmailOptin = 'True'
AND
(
sub.BenefitIds LIKE '%B13%'
OR
sub.BenefitIds LIKE '%B26%'
)
AND
(
(srv.QuestionId = 'purchaseIntentQuestion' AND srv.AnswerId = '3')
OR
(srv.QuestionId = 'goldenQuestion' AND (srv.AnswerId = '1' OR srv.AnswerId = '2' ))
)
对于上述查询,即使 EmailOptin 也不是 True。 请指教。
【问题讨论】:
-
什么是 1 = 1 ?
-
@JimMacaulay - 只是为了区分查询中存在的所有条件。没有其他用途。
-
那去掉会更好。你能发布你得到的错误/
标签: sql sql-server join