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;