2012-08-01 37 views
0

我目前无法进行测试,但尚未找到任何相关示例。 我想尝试这样的事:我可以使用这样的案例说明吗?

SELECT member.name, DISTINCT member.id, 
    COUNT(CASE WHEN member.code = 'A' 
    THEN 1) AS CountACode, ... CountBCode, COUNT(*) as CountTotal FROM member 

我明白,我可以做不同的,但我有我已经在使用,这将是这么多更容易做一些其他相关的列。但是我相信我被告知我错了,没有任何迹象表明为什么。有人会告诉我问题在哪里吗?

+0

case语句本身是好的(减去缺少'END')。 – mellamokb 2012-08-01 13:30:49

回答

0

你不可以在条款之后立即写上DISTINCT条款。

是的,你可以使用CASE WHEN语句中COUNT

SELECT DISTINCT member.name, member.id, 
     COUNT(CASE WHEN member.code = 'A' THEN 'something..' END) AS CountACode, 
     ... CountBCode, 
     COUNT(*) as CountTotal 
FROM member; 
0

你的问题是,它适用于整个结果集,而不只是单场DISTINCT

为计数,这个正常的模式是我们SUM

SUM(CASE WHEN Condition = value THEN 1 ELSE 0 END) 
0
SELECT member.name, member.id, SUM(CASE WHEN member.code = 'A' THEN 1 ELSE 0) AS CountACode, ... CountBCode, COUNT(*) as CountTotal 
FROM member 
GROUP BY member.name, member.id