Sql ELSE案例不起作用

Sql ELSE案例不起作用,sql,Sql,我有下面的查询,我试图在没有组织的情况下显示消息“此RAO没有子资源”。名称“,请查看下面的查询,它工作正常,但在没有组织的情况下不显示我的消息。返回名称 DECLARE @RAOID INT, @ORGID INT SET @ORGID = 28 SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID) PRINT @RAOID IF @RAOID IS NOT NULL BEGIN SELECT

我有下面的查询,我试图在没有组织的情况下显示消息“此RAO没有子资源”。名称“,请查看下面的查询,它工作正常,但在没有组织的情况下不显示我的消息。返回名称

DECLARE @RAOID INT, @ORGID INT

SET @ORGID = 28
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID)

PRINT @RAOID

IF @RAOID IS NOT NULL
BEGIN
  SELECT 
    CASE 
      WHEN tblOrganisation.ORGID IS NOT NULL THEN tblOrganisation.ORGID 
      ELSE 'No ORGID' 
    END AS ORGID,
    CASE 
      WHEN tblOrganisation.Name IS NOT NULL THEN tblOrganisation.Name 
      ELSE 'No SubSource for this RAO' 
    END as SUBSOURCENAME
  FROM tblOrganisation 
  LEFT OUTER JOIN tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID
  WHERE
    tblSubGroup.RAOID = @RAOID
END
谢谢

致以最良好的祝愿, MS

最初的WHERE子句将外部联接更改为内部联接,因此需要在其中进行筛选

此外,还有其他几点:

  • 为什么加入tblSubGroup?它不用于输出。除非你正在用箱子检查

  • TblorOrganization.Name是空字符串还是空字符串

    ISNULL(NULLIF(tblorganization.Name.),“此RAO无子源”)作为ORGID

试试这个,这可能是你想要的

DECLARE @RAOID INT, @ORGID INT

SET @ORGID = 28
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID)
PRINT @RAOID

IF @RAOID IS NOT NULL
BEGIN
    SELECT 
        ISNULL(tblSubGroup.ORGID), 'No ORGID') AS ORGID,
        ISNULL(NULLIF(tblSubGroup.Name, ''), 'No SubSource for this RAO') AS SUBSOURCENAME
    FROM
        tblOrganisation 
        LEFT OUTER JOIN
        tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID
                AND
                tblSubGroup.RAOID = @RAOID
END
DECLARE @RAOID INT, @ORGID INT

SET @ORGID = 28
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID)

PRINT @RAOID

IF @RAOID IS NOT NULL
BEGIN
  SELECT 
    CASE 
      WHEN tblOrganisation.ORGID IS NOT NULL THEN tblOrganisation.ORGID 
      ELSE 'No ORGID' 
    END AS ORGID,
    **CASE isnull(tblOrganisation.Name,'')
      WHEN '' THEN 'No SubSource for this RAO'
      ELSE  tblOrganisation.Name**
    END as SUBSOURCENAME
  FROM tblOrganisation 
  LEFT OUTER JOIN tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID
  WHERE
    tblSubGroup.RAOID = @RAOID
END
但是,我还是不知道你想要什么

DECLARE @RAOID INT, @ORGID INT

SET @ORGID = 28
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID)
PRINT @RAOID

IF @RAOID IS NOT NULL
BEGIN
    SELECT 
        ISNULL(tblSubGroup.ORGID), 'No ORGID') AS ORGID,
        ISNULL(NULLIF(tblSubGroup.Name, ''), 'No SubSource for this RAO') AS SUBSOURCENAME
    FROM
        tblOrganisation 
        LEFT OUTER JOIN
        tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID
                AND
                tblSubGroup.RAOID = @RAOID
END
DECLARE @RAOID INT, @ORGID INT

SET @ORGID = 28
SET @RAOID = (SELECT RAOID FROM tblOrganisation WHERE ORGID = @ORGID)

PRINT @RAOID

IF @RAOID IS NOT NULL
BEGIN
  SELECT 
    CASE 
      WHEN tblOrganisation.ORGID IS NOT NULL THEN tblOrganisation.ORGID 
      ELSE 'No ORGID' 
    END AS ORGID,
    **CASE isnull(tblOrganisation.Name,'')
      WHEN '' THEN 'No SubSource for this RAO'
      ELSE  tblOrganisation.Name**
    END as SUBSOURCENAME
  FROM tblOrganisation 
  LEFT OUTER JOIN tblSubGroup ON tblOrganisation.SubGroupID = tblSubGroup.SubGroupID
  WHERE
    tblSubGroup.RAOID = @RAOID
END

这样做可能对你有用。

谢谢!我需要在where子句中更改什么?你能给我正确的代码吗?它对我不起作用,因为没有where条件。它显示了所有的Organization,并且我在Organization的第行得到了“无法转换为字符”的错误。错误为null(NULLIF(tblSubGroup.ORGID),,,,,,“No ORGID”)。在我的询问中可能吗?如果不需要的话。我只在.Name中添加了空字符串,而不是空字符串。什么数据库系统?什么版本?如果您的else不工作,则该字段不为空。它返回了什么?您需要学习突出显示您的代码(SQL或其他),然后单击工具栏上的“代码”按钮(010 1010)以很好地格式化它!