0

我有一个类似于下面显示的 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            |
------------------------------

有人可以帮我吗?谢谢!

4

3 回答 3

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;
于 2013-07-18T20:07:23.743 回答
2

使用 TSQLCASE语句

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
于 2013-07-18T20:07:12.337 回答
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;
于 2013-07-18T21:44:19.697 回答