2013-05-08 62 views
-1

嗨,有人能帮助我吗?SQL从IN()中的每个项目获取结果

我有此查询:

SELECT DISTINCT(CAMPAIGN), 
    count(STATUS) 
FROM  
C18_101 INNER JOIN CLIENT_10 ON C18_101.ID = CLIENT_10.ID 
WHERE CAMPAIGN in ('Batch 1','Batch 2','Batch 3','Batch 4','Batch 5') AND STATUS = 'Pending' 
GROUP BY CAMPAIGN,STATUS 

结果看起来是这样的:

Batch 2  241 

Batch 3  321 

Batch 4  575 

Batch 5  429 

我还需要BATCH1结果,即使是没有的。

+0

查询似乎没问题。检查是否实际上有'Batch 1'的数据,其状态为pending – 2013-05-08 12:57:00

+0

@ARS:即使没有记录,他也希望'Batch 1'。 – 2013-05-08 12:58:28

+0

@TimSchmelter:哦,我错过了那一点..我想我的背痛止痛药是影响我的浓度:) – 2013-05-08 12:59:34

回答

3
SELECT 
    X.CAMPAIGN, 
    count(STATUS) 
FROM 
    (SELECT DISTINCT CAMPAIGN FROM C18_101) X 
    LEFT JOIN 
    CLIENT_10 C ON X.ID = C.ID AND C.STATUS = 'Pending' 
GROUP BY 
    X.CAMPAIGN 
  1. 你要么GROUP BY或聚合,而不是两个
  2. 您不同的前JOIN,以确保您的计数是每个广告活动的正确
  3. 你真的需要一个活动过滤器?如果是这样,请添加到派生表X
+0

谢谢我非常满意帮助,但是活动在表中CLIENT_10现在我得到一些消息加入 – Jacobs 2013-05-08 13:26:03

+0

@ user2358570:喜欢什么? – gbn 2013-05-08 13:28:08

+0

SELECT CLIENT_NLE001.SIZO_CAMPAIGN_ID__C, 计数(X.lib_status) FROM (SELECT DISTINCT CLIENT_NLE001.SIZO_CAMPAIGN_ID__C FROM C18_NLE001)X INNER JOIN CLIENT_NLE001 ON X.INDICE = CLIENT_NLE001.INDICE AND C.STATUS = '未接来电规则' GROUP BY X.SIZO_CAMPAIGN_ID__C 的回应是: [FreeTDS] [SQL Server]无法绑定多部分标识符“CLIENT_NLE001.SIZO_CAMPAIGN_ID__C”。 [FreeTDS] [SQL Server]无效的列名称'INDICE'。 [FreeTDS] [SQL Server]无法绑定多部分标识符“C.STATUS”。 [FreeTDS] [SQL Server]无效的列名'lib_status'。 – Jacobs 2013-05-08 14:34:54

3
SELECT CAMPAIGN, 
    count(STATUS) 
FROM C18_101 
LEFT JOIN CLIENT_10 ON C18_101.ID = CLIENT_10.ID AND STATUS = 'Pending' 
WHERE CAMPAIGN in ('Batch 1','Batch 2','Batch 3','Batch 4','Batch 5') 
GROUP BY CAMPAIGN 
+1

这仍然是错误的。 DISTINCT是预行,而不是每列。并且你不能COUNT和GROUP BY – gbn 2013-05-08 13:06:48

+1

@gbn谢谢,不专心专注于加入 – bummi 2013-05-08 13:09:29