2015-06-16 54 views
0

可能有人请帮助我获得A_VAL的总和在SQLMySQL的SUM超过CASE语句

下面
SELECT 
    CASE 
    WHEN COUNT(t.A_INS_NAM) = 10 THEN 1 
    WHEN COUNT(t.A_INS_NAM) = 20 THEN 2 
    WHEN COUNT(t.A_INS_NAM) BETWEEN 30 AND 50 THEN 3 
    WHEN COUNT(t.A_INS_NAM) > 50 THEN 5 
    ELSE 'some value' 
    END AS A_VAL 
FROM 
    TABLE1 t 
    JOIN IWD t1 ON(t.A_INS_NAM = t1.A_INS_NAM) 
    JOIN TIM t2 ON(t1.IWD = t2.IM_ID) 
    JOIN TWS t3 ON(t2.IM_ID = t3.T_ID) 
WHERE t3.TN = 'abced' 
    AND t.A_DATE BETWEEN '2014-01-01' AND '2015-05-01' 
    AND t.A_INS_NAM NOT LIKE '%pk%' 
+0

你是什么意思“a_val”?该查询返回一个带有“A_VAL”值的行。你想要的总和是多少?这个问题没有意义。样本数据和期望的结果非常有帮助。 –

回答

1

您可以使用select来计算总和一分,注意,您使用的是聚合函数没有GROUP BY它将导致为单排

SELECT SUM(A_VAL) 
FROM (
    SELECT 
     CASE 
     WHEN COUNT(t.A_INS_NAM) = 10 THEN 1 
     WHEN COUNT(t.A_INS_NAM) = 20 THEN 2 
     WHEN COUNT(t.A_INS_NAM) BETWEEN 30 AND 50 THEN 3 
     WHEN COUNT(t.A_INS_NAM) > 50 THEN 5 
     ELSE 'some value' 
     END AS A_VAL 
    FROM 
     TABLE1 t 
     JOIN IWD t1 ON(t.A_INS_NAM = t1.A_INS_NAM) 
     JOIN TIM t2 ON(t1.IWD = t2.IM_ID) 
     JOIN TWS t3 ON(t2.IM_ID = t3.T_ID) 
    WHERE t3.TN = 'abced' 
     AND t.A_DATE BETWEEN '2014-01-01' AND '2015-05-01' 
     AND t.A_INS_NAM NOT LIKE '%pk%' 
) a 
+1

非常感谢哈立德。我按日期添加了该组,并总结了该列。优秀。谢谢你再次堆。 – User12345

+0

@ user3124689。 。 。我不明白这会如何帮助你,因为它会返回与子查询相同的值(除非'else'子句真的返回一个非数字值)。 –

+0

你好Gordon - 没有SUM列,我会得到如下数据 DATE | A_VAL
01-01-2015 | 12
01-01-2015 | 12
与SUM,我得到总数36.让我知道如果这不明确。 – User12345