Sql 在不满足任何条件时添加虚拟数据
我有一个存储过程,它返回一个包含不同子句的集合,这是我遇到的一个小问题:Sql 在不满足任何条件时添加虚拟数据,sql,sql-server,Sql,Sql Server,我有一个存储过程,它返回一个包含不同子句的集合,这是我遇到的一个小问题: SELECT CASE WHEN td.BSP <= 2 THEN '01-02' WHEN td.BSP <= 3 THEN '02-03' WHEN td.BSP <= 5 THEN '03-05' WHEN td.B
SELECT CASE WHEN td.BSP <= 2 THEN '01-02'
WHEN td.BSP <= 3 THEN '02-03'
WHEN td.BSP <= 5 THEN '03-05'
WHEN td.BSP <= 8 THEN '05-08'
WHEN td.BSP <= 13 THEN '08-13'
WHEN td.BSP <= 21 THEN '13-21'
WHEN td.BSP <= 34 THEN '21-34'
WHEN td.BSP <= 55 THEN '34-55'
WHEN td.BSP <= 89 THEN '55-89'
WHEN td.BSP <= 1000 THEN '89-1000'
END AS label
这是可以的,就像我想要的那样工作,但是当没有BSP的数据时,它是否像在CASE语句中使用ELSE一样简单
SELECT CASE
WHEN td.BSP <= 2 THEN '01-02'
WHEN td.BSP <= 3 THEN '02-03'
WHEN td.BSP <= 5 THEN '03-05'
WHEN td.BSP <= 8 THEN '05-08'
WHEN td.BSP <= 13 THEN '08-13'
WHEN td.BSP <= 21 THEN '13-21'
WHEN td.BSP <= 34 THEN '21-34'
WHEN td.BSP <= 55 THEN '34-55'
WHEN td.BSP <= 89 THEN '55-89'
WHEN td.BSP <= 1000 THEN '89-1000'
ELSE '0'
END AS label
使用左连接。大概是这样的:
select v.label, count(td.bsp)
from (values (0, 2, '01-02'),
(2, 2, '02-03'),
. . . -- continue with the remaining groups
) v(lo, hi, label) left join
td
on td.BSP > v.lo and td.BSP = v.hi
group by v.label
order by v.lo;
不是真的,我希望01-02'的行在报告中以该组合出现,现在如果括号中没有可操作的数字,则该行不会出现,我希望最终结果显示该括号的0。您应该显示整个语句。您编写的只是查询的一部分。我添加了完整的语句为了更好地解释,我的数据集返回BSP的所有组合迭代的数据,但只有当它存在时,我才需要用0打印所有组合的标签,因此,我可以在数据不存在时进行检查,例如,没有括号_标签01-02,因为不存在数据,我希望01-02显示为“0”
select v.label, count(td.bsp)
from (values (0, 2, '01-02'),
(2, 2, '02-03'),
. . . -- continue with the remaining groups
) v(lo, hi, label) left join
td
on td.BSP > v.lo and td.BSP = v.hi
group by v.label
order by v.lo;