将值从0更改为“UNKNOWN”

时间:2013-07-18 20:04:05

标签: sql sql-server

我有一个类似于下面显示的SQL查询

SELECT col1 AS 'Column 1', SUM(ROUND(col2, 2)) AS 'Column 2'
FROM db.dbo.table
GROUP BY col1

这是在PHP脚本中运行的,用于生成JSON。第1列是浮点类型,第1列中的大块数据是0.我希望每当第1列中的值为0时,它将其替换为UNKNOWN。例如。我上面的查询将输出类似的内容

------------------------------
|0            |142563        |
------------------------------
|1            |348           |
------------------------------
|2            |2535          |
------------------------------
|3            |32            |
------------------------------
|4            |82536         |
------------------------------
|5            |12            |
------------------------------

我希望它像这样

------------------------------
|UNKNOWN      |142563        |
------------------------------
|1            |348           |
------------------------------
|2            |2535          |
------------------------------
|3            |32            |
------------------------------
|4            |82536         |
------------------------------
|5            |12            |
------------------------------

有人可以帮帮我吗?谢谢!

3 个答案:

答案 0 :(得分:4)

您想使用case声明:

SELECT (case when col1 = 0 then 'Unknown' else cast(col1 as varchar(255)) end) AS 'Column 1', 
       SUM(ROUND(col2, 2)) AS 'Column 2'
FROM db.dbo.table
GROUP BY col1;

我还添加了一个明确的cast(),因为col1是一个浮点数。

如果要控制格式,请使用str()。也许:

SELECT (case when col1 = 0 then 'Unknown' else str(col1, 6, 2) end) AS 'Column 1', 
       SUM(ROUND(col2, 2)) AS 'Column 2'
FROM db.dbo.table
GROUP BY col1;

答案 1 :(得分:2)

使用TSQL CASE声明

SELECT CASE WHEN col1 = 0 THEN 'Unknown' ELSE Col1 END AS 'Column 1', SUM(ROUND(col2, 2)) AS 'Column 2'
FROM db.dbo.table
GROUP BY col1

答案 2 :(得分:0)

在SQL Server 2012中,您可以执行

SELECT IIF(col1 = 0, 'UNKNOWN', cast(col1 as varchar(100)))AS 'Column 1', SUM(ROUND(col2, 2)) AS 'Column 2' 
FROM table
GROUP BY col1;