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