我想要一个SQL语句来选择"UserA"的所有值,但如果该值为空,则应使用"Default"列中的值。
我有一个数据库表,它定义了许多"变量",每个变量都包含每个用户的值或默认值。
VarName Default UserA UserB UserC
LeftEdge 0 10 50 60
TopEdge 5 100 100
Colour Red Cyan Green
我不想为单元格设置默认值,因为行的默认值可能会不时更改,并且需要更改所有空单元格,而不仅仅是具有旧默认值的单元格。
我尝试过使用JOIN,但我不知道如果单元格为空,如何让它选择默认值。
有人知道我是否可以使用一个简单的SQL语句,或者有一种更好的方法来构建数据以实现我想要的目标吗?
COALESCE
适用于您,如果它是NULL
。下面的解决方案可以处理NULL
和空字符串值。
SELECT
CASE WHEN UserA = '' THEN Default
WHEN UserA IS NULL THEN Default
ELSE UserA
END AS UserA
FROM TableName
不用说,设计非常糟糕。
您可以使用:
select varname, coalesce(userA, default) as value
from t
如果您真的要将用户映射到默认值,那么这是一个糟糕的设计。添加新用户需要添加一个新列——这通常是个坏主意。