【问题标题】:how to return result as NULL if the SQL query return zero values in SQL如果 SQL 查询在 SQL 中返回零值,如何将结果返回为 NULL
【发布时间】:2017-02-28 22:15:01
【问题描述】:

我有一个 sql 查询,如果在查询执行后没有结果集,我想将值返回为“NULL”。我已经尝试过 ISNULL 属性,但是它会产生错误,

我的查询是:

SELECT ISNULL((SELECT TOP (100) PERCENT a.ReportDate, a.Scripcode, a.ISIN, a.Scripname, a.AccountNo, a.ClientLongName, a.GroupName, a.Event, a.TradedQty, a.UnreconQty, a.ExDateQty, a.RecDateQty, a.Diff, a.Rate, a.Ratio, a.TotalValue, a.Shares, a.StartDate, a.ExDate, a.RecordDate, a.PayDate, a.AgmDate, a.NSecName, a.NSecNo, a.Remark, b.GRUL_PROX_GRP_ID, b.GRUL_GROUPNO, b.CUSTOMERNO, b.GRUL_SHORTNAME, b.GRUP_SHORTCODE, b.CONF_TYP, b.SWIFT, b.FAX, b.COURIER, b.EMAIL, b.Account_Group, b.Excel_Word, b.Password, b.Sub_Account_Flag 
FROM       dbo.CRS_Entitlement_MasterDate AS a 
INNER JOIN dbo.CRS_Entitlement_EntitlementComn AS b 
ON         a.AccountNo = b.CUSTOMERNO
WHERE      (b.Account_Group = 'A') 
AND        (b.Excel_Word = 'E') 
AND        (b.SWIFT <> 'v') 
AND        (b.CONF_TYP <> 'N/A') 
AND        (b.FAX = 'v') 
OR         (b.Account_Group = 'A') 
AND        (b.Excel_Word = 'E') 
AND        (b.SWIFT <> 'v') 
AND        (b.CONF_TYP <> 'N/A') 
AND        (b.COURIER = 'v') 
OR         (b.Account_Group = 'A') 
AND        (b.Excel_Word = 'E') 
AND        (b.SWIFT <> 'v') 
AND        (b.CONF_TYP <> 'N/A') 
AND        (b.EMAIL = 'v')
ORDER BY   a.AccountNo), 0) AS Expr1

请帮我解决这个问题,在此先感谢!!!

【问题讨论】:

  • 给我们涉及的表格脚本和示例数据,我们很乐意提供帮助!
  • ISNULL 仅适用于单个列或表达式,而不适用于整个结果集。这就是导致您的错误的原因。
  • @squillman 也一样,ISNULL 不能按照 op 想要的方式工作
  • 查询返回数据时要返回什么?
  • 顺便说一句,请检查您在WHERE 条件中使用ANDOR 的方式。我几乎可以肯定你弄错了

标签: sql-server vb.net


【解决方案1】:

像这样使用EXISTS

-- returns NULL when it doesn't exist
SELECT  CASE WHEN EXISTS ( SELECT   1 AS val
                           WHERE    1 = 2 ) THEN 1
             ELSE NULL
        END RESULT;

-- returns something else, in this case 1 when it does exist    
SELECT  CASE WHEN EXISTS ( SELECT   1 AS val
                           WHERE    1 = 1 ) THEN 1
             ELSE NULL
        END RESULT;

存在 (Transact-SQL)

指定一个子查询来测试是否存在行。

有数据的样本:

CREATE TABLE #test ( id INT );

INSERT  INTO #test
        ( id )
VALUES  ( 1 ),
        ( 2 ),
        ( 3 );

-- returns data
IF ( EXISTS ( SELECT    *
              FROM      #test
              WHERE     id > 0 ) )
    SELECT  *
    FROM    #test
    WHERE   id > 0;
ELSE
    SELECT  NULL;

 -- returns NULL 
 IF ( EXISTS ( SELECT    *
              FROM      #test
              WHERE     id > 5 ) )
    SELECT  *
    FROM    #test
    WHERE   id > 5;
ELSE
    SELECT  NULL AS Result;


DROP TABLE #test;     

【讨论】:

    【解决方案2】:

    您不能在内部查询中放置多个列。例如 select top(100) percent a.ReportDate ---- 将起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多