sql server插入缺少的ID值

时间:2020-11-03 07:30:41

标签: sql sql-server

我有一个包含四列的表

ID, day, Shift 1 and shift 2 

id是30,32

今天是今天和昨天,

班次1和班次2对于今天的进入具有一些值

没有ID为32的数据

我希望如果特定ID的数据不存在,则应显示“-”

当前输出为

ID, day,     shift1,    shift2 
30, today,   4,        4
30,  yesterday,    5,         6
32,  yesterday,     9,         8 

但我想要输出为

ID, day,      shift1,    shift2, 
30,  today,    4,         4
32,  today,    -,        -
30,  yesterday,     5,         6
32,  yesterday,     9,         8 

如果每天没有任何ID的数据,那么在班次中应显示为-

请给我一些建议。谢谢

2 个答案:

答案 0 :(得分:1)

select id, day, ifnull(shift1,'-') as shift1, ifnull(shift2,'-') as shift2
from tablename

您的标签是mysql,因此首先是mysql的答案

但是您的标题是sql server,所以在sql server的答案下面:

select id, day, isnull(shift1,'-') as shift1, isnull(shift2,'-') as shift2
from tablename

您显然需要用表的实际名称替换表名

答案 1 :(得分:1)

如果移位列是字符串,则可以使用coalesce()

select id, day, coalesce(shift1, '-') as shift1, coalesce(shift2, '-') as shift2
from tablename;

但是,如果列为数字,则此操作将无效。在这种情况下,您需要先将值转换为字符串:

select id, day,
       coalesce(cast(shift1 as varchar(255)), '-') as shift1,
       coalesce(cast(shift2 as varchar(255)), '-') as shift2
from tablename;

MySQL中的语法略有不同:

select id, day,
       coalesce(cast(shift1 as char), '-') as shift1,
       coalesce(cast(shift2 as char), '-') as shift2
from tablename;