如果没有返回任何行,则执行此操作

时间:2010-09-13 16:50:31

标签: sql sql-server sql-server-2005

我有一个select语句,我想说如果这个select语句没有返回任何行,那么在每个单元格中放一个''。我该怎么做?

7 个答案:

答案 0 :(得分:8)

select a, b, c from t
if @@rowcount = 0
    select '' as a, '' as b, '' as c

但请确保您了解''可能与列abc的数据类型不同。

答案 1 :(得分:5)

试试这个 -

IF NOT EXISTS ( SELECT 'x' FROM <TABLE> .... )
BEGIN
    -- Your logic goes here
END

答案 2 :(得分:3)

将空行选择放在联合的底部

select x.JobName , x.Description
from MasterJobList x
where x.IsCycleJob = 1 

union all

select "" , "" 
from MasterJobList x
where not exists
    (
    select 1
    from MasterJobList x
    where x.IsCycleJob = 1 
    )

答案 3 :(得分:2)

听起来你还没有得到你想要的所有行。真正?我认为@Joe Sefanelli为您的解决方案提供了重要的一部分,然后提到您需要将INNER更改为LEFT连接。

因此,您说要显示单位列表中的所有单位。并且,如果单元没有数据,则显示不存在的数据的单位和空白。

这是一个可能的解决方案。将FROM子句更改为以下内容:

FROM  [dbo].[Unit] u 
LEFT OUTER JOIN 
    (
    SELECT *
    FROM [dbo].[IUA] i
    JOIN [dbo].[Reports] r ON r.[Report_ID] = i.[Report_ID]
    JOIN [dbo].[State] s ON i.[St_ID] = s.[St_Id]
    WHERE r.[Account] = [dbo].[fn_Get_PortalUser_AccountNumber](11-11)
        AND r.[Rpt_Period] = '2126'
        AND r.[RptName] = 'tfd'
        AND r.[Type] = 'h'    
    ) ir ON ir.[Unit_ID] = u.[Unit_ID]
LEFT JOIN [dbo].[UnitType] ut ON u.[UnitType] = ut.[UnitType]
WHERE u.[Unit] IN (SELECT [VALUE] 
               FROM dbo.udf_GenerateVarcharTableFromStringList(@Units, ','))
;

通过此更改,您将获得@Units列表中的单位列表。左外连接将包括与每个单元关联的数据,但如果没有关联数据,则不会排除单元。

答案 4 :(得分:1)

根据发布的代码,我认为你想要删除UnitType表中的列,因为这是你唯一加入的列。在那种情况下使用

ISNULL(ut.[Description], '')  AS UnitType

答案 5 :(得分:0)

select top 1 isnull(max(col2),' ') as noNullCol from table1 where col1='x'

max返回null,其中没有行,isnull函数返回' '而不是null

答案 6 :(得分:0)

以下是我用于单个列的示例 - 如果数据集中没有匹配项,则很容易生成空白行。

select Company from customer where customer=@Company
union
select '' where not exists (select 1 from customer where customer=@Company)

如果没有匹配项,则会创建一行空格。