结果为空时如何带来一些值

时间:2013-12-25 07:29:47

标签: sql sql-server tsql

我有一个这样的存储过程:

declare @myVal int

select 
    t2.short_descr , count(*) as count 
FROM 
    t1 
INNER JOIN 
    t2 ON t1.id = t2.id                                                                         
where 
    [date] BETWEEN DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) and GETDATE())
group by 
    t2.short_descr 

它运行良好,现在我希望程序返回结果,即使它是空的;在这种情况下,我想返回

select @myVal

我试过这样:

  declare @myVal int

  select 
      t2.short_descr , count(*) as count 
  FROM 
      t1 
  INNER JOIN 
      t2 ON t1.id = t2.id
  where 
      [date] BETWEEN DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) and GETDATE())
  group by 
      t2.short_descr 

  IF @@ROWCOUNT = 0 
     select @myVal

但是当结果为空时,存储过程会选择2个结果:空和@myVal。我想如果是空的,请选择@myVal。怎么样?

1 个答案:

答案 0 :(得分:2)

您可以像这样添加EXISTS支票:

IF EXISTS ( SELECT 1 FROM t1 INNER JOIN t2 ON t1.id = t2.ID
           where [date] BETWEEN DATEADD(day,DATEDIFF(day,0,GETDATE()),0) and GETDATE()) )
BEGIN
    select t2.short_descr , count(*) as count 
    FROM t1 
    INNER JOIN t2 ON t1.id = t2.id                                                                         
    where [date] BETWEEN DATEADD(day,DATEDIFF(day,0,GETDATE()),0) and GETDATE())
    group by t2.short_descr
END
ELSE
BEGIN
     select @myVal
END