我有一张这样的表:
----------------
|cloumn1|cloumn2|
-----------------
| 1 | 2 |
-----------------
| 3 | 1 |
-----------------
| 4 | 2 |
-----------------
| 1 | 1 |
-----------------
我需要从我的表中查询此结果:
-------------------------------
|cloumn1|cloumn2|compare_result|
--------------------------------
| 1 | 2 | smaller |
--------------------------------
| 3 | 1 | bigger |
--------------------------------
| 4 | 2 | bigger |
--------------------------------
| 1 | 1 | equal |
--------------------------------
这意味着如果column1是较大的第2列,则第三列(compare_result)显示较小,如果较小则显示较小,等等......
答案 0 :(得分:2)
您可以将CASE
与多个WHEN
语句结合使用,以获得所需的结果:
SELECT
column1,
column2,
CASE
WHEN column1 > column2 THEN 'bigger'
WHEN column1 < column1 THEN 'smaller'
ELSE 'equal'
END as compare_result
FROM tablename
如果您的列不可为空,则上述查询将起作用(即它们不能为NULL
)。
答案 1 :(得分:1)
您想使用case
:
select t.*,
(case when column1 > column2 then 'bigger'
when column1 < column2 then 'smaller'
when column1 = column2 then 'equal'
else '???'
end) as compares_to
from t;
您可以将此逻辑包装在视图中,以便访问该表的任何人都可以看到它。
如果其中一个或两个值为'???'
,则会发生NULL
。
答案 2 :(得分:1)
您可以将查询用作
SELECT T.*,
CASE
WHEN column1 < column2 THEN 'smaller'
WHEN column1 > column2 THEN 'bigger'
WHEN column1 = column2 THEN 'equal'
END AS compare_result
FROM TABLE_NAME T;