我有一张如下表格,
client id order q order date
----------- ----------- ----------
1 0 2016-02-01
1 0 2016-05-03
当sum([order q])= 0时我希望结果是' - ',如果它返回大于零的值,我想要结果。
我尝试了以下查询,但它只返回零。
select case when sum([order q]) = 0 THEN '-' else sum([order q]) END
from t1
帮我解决这个问题。
答案 0 :(得分: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]
答案 1 :(得分:1)
您应该将sum()转换为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
答案 2 :(得分:1)
由于' - '是一个字符和sum([order q])将是数字数据类型,您不能使用问题中提到的语法,您必须将两者转换为类似的数据类型。试试这个查询
SELECT CASE ISNULL(SUM([order q]), 0)
WHEN 0
THEN CONVERT( CHAR(1), '-')
ELSE CONVERT(VARCHAR(20), SUM([order q]))
END
FROM t1;
答案 3 :(得分:1)
由于订单栏的数据类型为 int ,因此无效。数据类型始终设置为聚合函数中使用的列数据类型。当你在这里提到' - '它内部将其转换为-0而0不能在否定时显示你0 强>
答案 4 :(得分: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