Sql server 如果子查询不返回行,则返回0,否则返回子查询的值

Sql server 如果子查询不返回行,则返回0,否则返回子查询的值,sql-server,subquery,Sql Server,Subquery,我有个问题,你很可能会帮助我。 我得到了一个带有子查询的查询,该子查询缩小了搜索范围。查询以以下内容结束 SELECT * FROM Purchase WHERE Total < 5000 AND Total > ( SELECT TOP 1 buyamount FROM empl

我有个问题,你很可能会帮助我。 我得到了一个带有子查询的查询,该子查询缩小了搜索范围。查询以以下内容结束

SELECT 
    * 
FROM 
    Purchase
WHERE
    Total < 5000
AND 
    Total > 
            (
                SELECT TOP 1
                   buyamount
                FROM
                   employee
                WHERE
                   manager = 'TST'
                ORDER BY
                   buyamount ASC
            )
ORDER BY Date DESC

我希望子查询的值在>之后。。。但是如果子查询没有返回任何内容,我希望它为0。如何做到这一点?

在您发布的示例中,您只需将子查询包装进去,即可获得所需的结果

SELECT 
    * 
FROM 
    #Purchase
WHERE
    Total < 5000
AND 
    Total > COALESCE(
            (
                SELECT TOP 1
                   buyamount
                FROM
                   #employee
                WHERE
                   manager = 'TST'
                ORDER BY
                   buyamount ASC
            ), 0)
ORDER BY Date DESC
您还可以在提供的示例中使用变量,而不是子查询。我更喜欢这种方法,因为它分离了逻辑,使其更易于阅读。子查询也可能是性能杀手。像这样爆发,它应该表现得更好

DECLARE @BuyAmount INT
SET @BuyAmount = (SELECT TOP 1 BuyAmount FROM #Employee WHERE Manager = 'TST' ORDER BY BuyAmount ASC)
IF @BuyAmount IS NULL SET @BuyAmount = 0

SELECT * 
FROM #Purchase
WHERE Total < 5000 AND Total > @BuyAmount
ORDER BY Date DESC

您可以使用ifnull,比如IFNULLSELECT TOP 1 buyamount FROM employee,其中manager='TST'ORDER BY buyamount ASC,0 mysql中没有TOP,是否应将此问题标记为sqlserver?或者您正在尝试将查询移植到mysql?@P.Salmon您的权利!对不起。它适用于widgetYou可以像这样使用COALESCE:COALESCE…此处的子查询…,0