2016-06-28 29 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