SQL查询组合两列条件触发语法错误,寻求解决方案
问题分析与修正方案
错误原因
你遇到的报错是因为WHERE子句中的AND 'S6 - real-love'是无效的SQL语法。SQL的WHERE条件要求每个子句都是布尔表达式(即“列名 操作符 值”的结构),而单独的字符串无法被解析为合法的条件判断。
针对需求的修正方案
根据你描述的需求——统计AllSubscribershistroyland表中两个列(S4 - Dutch real-love和S6 - real-love)对应的订阅者数量,分两种常见场景给出修正后的查询:
场景1:订阅者需同时满足两个列的有效条件
如果这两个列是布尔类型(存储1/0或true/false),要筛选两个列都为“有效”的订阅者,查询如下:
SELECT SubscriberKey, COUNT(*) AS TotalSentLast180Days FROM ( SELECT s.SubscriberKey FROM ENT._Sent s INNER JOIN ENT.AllSubscribershistroyland ROCS ON ROCS.SubscriberKey = s.SubscriberKey WHERE ROCS.[S4 - Dutch real-love] = 1 AND ROCS.[S6 - real-love] = 1 AND s.OYBAccountID = '85208879' AND s.EventDate >= DATEADD(DAY, -180, GETDATE()) ) t GROUP BY SubscriberKey
如果这两个列是字符串类型,要筛选两个列都不为空的订阅者,将条件改为:
WHERE ROCS.[S4 - Dutch real-love] IS NOT NULL AND ROCS.[S6 - real-love] IS NOT NULL
场景2:订阅者的SLSegment__c值为两个选项之一
如果你的真实需求是筛选SLSegment__c字段值为S4 - real-love或S6 - real-love的订阅者(可能之前混淆了列名和字段值),可以用IN简化条件:
SELECT SubscriberKey, COUNT(*) AS TotalSentLast180Days FROM ( SELECT s.SubscriberKey FROM ENT._Sent s INNER JOIN ENT.AllSubscribershistroyland ROCS ON ROCS.SubscriberKey = s.SubscriberKey WHERE ROCS.SLSegment__c IN ('S4 - real-love', 'S6 - real-love') AND s.OYBAccountID = '85208879' AND s.EventDate >= DATEADD(DAY, -180, GETDATE()) ) t GROUP BY SubscriberKey
内容的提问来源于stack exchange,提问作者matewos
相关产品推荐
相关产品推荐

