Sql server 获取默认值'-';当和数值为零时从case语句
我有一张像下面这样的桌子Sql server 获取默认值'-';当和数值为零时从case语句,sql-server,sum,case,Sql Server,Sum,Case,我有一张像下面这样的桌子 client id order q order date ----------- ----------- ---------- 1 0 2016-02-01 1 0 2016-05-03 当和([order q])=0时,我希望结果为“-”,如果它返回大于零的值,我希望结果 我尝试了以下查询,但它只返回零 select case when sum([order q]) = 0
client id order q order date
----------- ----------- ----------
1 0 2016-02-01
1 0 2016-05-03
当和([order q])=0时,我希望结果为“-”,如果它返回大于零的值,我希望结果
我尝试了以下查询,但它只返回零
select case when sum([order q]) = 0 THEN '-' else sum([order q]) END
from t1
请帮助我解决此问题。我相信您打算按客户id值分组:
SELECT CASE WHEN SUM([order q]) = 0 THEN '-'
ELSE CAST(SUM([order q]) AS VARCHAR)
END
FROM t1
GROUP BY [client id]
我相信您打算根据客户id值对客户进行分组:
SELECT CASE WHEN SUM([order q]) = 0 THEN '-'
ELSE CAST(SUM([order q]) AS VARCHAR)
END
FROM t1
GROUP BY [client id]
您应该将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
您应该将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
由于“-”是一个字符,而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;
由于“-”是一个字符,而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;
由于订单列的数据类型为int,因此将不起作用。数据类型始终设置为您在聚合函数中使用的列数据类型。当您在这里提到“-”时,它内部将其转换为-0,当0不能处于负值时,它将显示您0,因为订单列的数据类型为int,因此它将不起作用。数据类型始终设置为您在聚合函数中使用的列数据类型。当您在这里提到“-”时,它内部将其转换为-0,而当0不能处于负值时,它将显示0