2016-06-28 70 views
0

我有一个表像下面,获取默认值“ - ”从case语句当总和值是零

client id order q  order date 
----------- ----------- ---------- 
1   0   2016-02-01 
1   0   2016-05-03 

当总和([阶数q])= 0 I想要的结果是“ - ”如果它返回的值大于零,我想要结果。

我试过以下查询,但它只返回零。

select case when sum([order q]) = 0 THEN '-' else sum([order q]) END 
from t1 

帮我解决这个问题。

回答

1

我相信你正打算GROUP BY值客户ID:

SELECT CASE WHEN SUM([order q]) = 0 THEN '-' 
      ELSE CAST(SUM([order q]) AS VARCHAR) 
     END 
FROM t1 
GROUP BY [client id] 
+0

谢谢...它工作正常... – DineshDB

0
;WITH CTE 
AS (
    SELECT CONVERT(VARCHAR(10),SUM([order q])) as c1 from t 
) 
SELECT 
    CASE c1 
    WHEN '0' THEN '-' 
    ELSE c1 
    END as c2 
from CTE 
+0

谢谢...这也工作得很好... – DineshDB

1

你应该总和()转换为VARCHAR。试试这个样子,

DECLARE @T TABLE (
    clientid INT 
    ,orderq INT 
    ,orderdate DATE 
    ) 

INSERT INTO @T 
VALUES (
    1 
    ,0 
    ,'2016-02-01' 
    ) 
    ,(
    1 
    ,0 
    ,'2016-05-03' 
    ) 

SELECT CASE 
     WHEN sum(orderq) > 0 
      THEN convert(VARCHAR(10), sum(orderq)) 
     ELSE '-' 
     END as orderq 
FROM @t 
+0

谢谢...它工作正常... – DineshDB

1

由于“ - ”是一个字符,SUM([q阶])将数字数据类型的,你在问题中提到你不能使用语法,你必须既转换成类似的数据类型。试试这个查询

SELECT CASE ISNULL(SUM([order q]), 0) 
      WHEN 0 
      THEN CONVERT(CHAR(1), '-') 
      ELSE CONVERT(VARCHAR(20), SUM([order q])) 
     END 
FROM t1; 
+0

谢谢...它工作正常... – DineshDB

1

当你的数据类型订单列是INT所以将无法​​正常工作。数据类型始终设置为列数据类型,您在集合函数中使用的数据类型。正如你在此提出“ - ”内部将其转换到-0和0不能在显示您0

+0

是啊谢谢你的答案... – DineshDB