首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL -返回空值时如何返回值

SQL -返回空值时如何返回值
EN

Stack Overflow用户
提问于 2021-04-02 17:27:27
回答 2查看 51关注 0票数 0

我正在尝试为SSRS中的一个参数编写一个查询,如果它没有拉回任何数据,它将在参数中放入"None“。以下是我尝试过的方法:

代码语言:javascript
运行
AI代码解释
复制
    select CASE
    WHEN pt.propertynumber IS NOT NULL
      THEN pt.propertynumber 
    ELSE 'None'
    END AS "Field1"
    from projectmaintenanceproperties pmp
    left join projectmaintenances pm on pm.id = pmp.projectmaintenanceid
    left join properties pt on pt.id = pmp.propertyid
    where pm.id in (:Ops)
    and pt.projectid in ( :Proj )
    order by 1

当没有回调数据时,它不会在Field1中返回任何内容。

我怎么告诉它返回'None‘呢?

EN

回答 2

Stack Overflow用户

发布于 2021-04-02 17:34:25

哦,评论是正确的-是我的错。相反,您将需要一个IF语句来检查是否返回了任何值:

代码语言:javascript
运行
AI代码解释
复制
IF EXISTS
(    select CASE
    WHEN pt.propertynumber IS NOT NULL
      THEN pt.propertynumber 
    ELSE 'None'
    END AS "Field1"
    from projectmaintenanceproperties pmp
    left join projectmaintenances pm on pm.id = pmp.projectmaintenanceid
    left join properties pt on pt.id = pmp.propertyid
    where pm.id in (:Ops)
    and pt.projectid in ( :Proj )
    order by 1;
)
THEN select pt.propertynumber [Field1]
    from projectmaintenanceproperties pmp
        left join projectmaintenances pm on pm.id = pmp.projectmaintenanceid
        left join properties pt on pt.id = pmp.propertyid
    where pm.id in (:Ops)
        and pt.projectid in ( :Proj )
    order by 1;
ELSE
    SELECT 'None' AS [Field1];
END IF;
票数 0
EN

Stack Overflow用户

发布于 2021-04-02 18:29:42

好吧,这是一个噩梦,也许能解决这个问题。我之所以做这个噩梦,是因为我曾经有一个查询非常巧妙地使用了UNION和NOT EXISTS来返回一个完全不同的查询,并且在执行第二个查询时导致了一个灾难性的查询计划。

我在下面做的是使用一个假的左外部连接,这个表只有一行到您想要的值表。它是假的,因为连接谓词总是真的。因此,对于查询中的每一行,也将返回ForNone查询中的列,但是会被忽略,因为coalesce将返回查询中的值(除非它为null,如果有可能,您可以在查询中添加检查)。如果您的查询没有结果,则只返回一行,因为and coalesce将使用值'None‘。

代码语言:javascript
运行
AI代码解释
复制
SELECT COALESCE(src.Field1, ForNone.NoneField) AS "Field1"
FROM ( SELECT 'None' AS "NoneField" ) ForNone
LEFT OUTER JOIN ( 
    select pt.propertynumber AS "Field1"
    from projectmaintenanceproperties pmp
    left join projectmaintenances pm on pm.id = pmp.projectmaintenanceid
    left join properties pt on pt.id = pmp.propertyid
    where pm.id in (:Ops)
    and pt.projectid in ( :Proj )
    order by 1
) src ON 1 = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66923000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档