如果在SQL SERVER中不存在Row(Record),则返回值

时间:2014-12-24 12:08:06

标签: sql sql-server database sql-server-2008

我有一张名为' Banners'以下数据和结构:

ID  Name   Enabled SectionID Slot

112 kabob     1      231      6 
198 Omega-5   1      231      1 
165 eeee      1      231      3 
171 iiii      1      231      3 
172 jjjj      1      231      3
113 cooked    1      231      4
114 coconut   1      231      5 

注意:Slot列中的所有6个插槽(1到6)都可以,但我没有为插槽2添加记录。 即插槽2不存在行。

查询:

SELECT DISTINCT Slot AS '231' FROM Mercola_Banners WHERE      
 SectionID = 231 and ENABLED = 1    
 GROUP BY slot  
 HAVING COUNT(1) <=15

我得到的结果:

  231 
1  1
2  3
3  4
4  5
5  6

因为,我没有为插槽2添加任何记录,但未在结果中显示。但我想在我的结果中插入那个插槽。因为它没有插槽2的任何记录。或计数&lt; 15。 如下图所示。

预期结果:

  231 
1  1
2  2
3  3
4  4
5  5
6  6

2 个答案:

答案 0 :(得分:0)

评论太长了。

为什么你会厌烦这么复杂的查询?为什么不这样做:

select n as [231]
from (select 1 as n union all select 2 union all select 3 union all select 4 union all
      select 5 union all select 6
     ) n

我不知道你想要的结果与表格中的数据有什么关系。

编辑:

如果我理解正确,你仍然想要应用其他标准。您说2符合条件,因为行数少于15行。但它没有进入输出,因为没有行。以下是此问题的一种解决方案:

SELECT n.n AS [231]
FROM (select 1 as n union all select 2 union all select 3 union all select 4 union all
      select 5 union all select 6
     ) n LEFT JOIN
     Mercola_Banners mb
     ON n.n = mb.slot and mb.SectionID = 231 and mb.ENABLED = 1    
GROUP BY n.n  
HAVING COUNT(mb.slot) <= 15

答案 1 :(得分:0)

干净的方法是有一个表,例如称为插槽 然后,您可以执行以下查询:

select slotid, (select count(*) from banners b where b.slot = slotid) as count 
from slots.

这样,如果您以后添加更多插槽,则只需将它们添加到该表中即可。