为什么我只是通过更改SELECT子句获得零行或具有NULL值的行?

时间:2011-05-02 14:55:47

标签: sql-server tsql user-defined-functions

我刚才碰到了意想不到的事情,它提醒我,我还有很多关于SQL的知识。

我有一个报告查询,它使用UNION ALL来连接不同日期范围的结果,并将它们以HTML格式存储在临时表中。该查询今天给出了MTD范围的NULL值,因为1日没有活动。我不明白的是:为什么我会得到任何排?玩弄查询,我看到了这个剪辑:

SELECT
    70000,
    '<tr>' + dbo.FormatAsHTMLRowHead('Month to date') + '</tr>'
FROM
    #RawResults
WHERE
    Date = '2011-05-01'

...没有预期的结果,零行。但是,如果我在SELECT子句中添加一个字段:

SELECT
    70000,
    '<tr>'
    + dbo.FormatAsHTMLRowHead('Month to date')
    + dbo.FormatAsHTMLCell(dbo.FormatInteger(SUM(Leads)), 'R')
    + '</tr>'
FROM
    #RawResults
WHERE
    Date = '2011-05-01'

然后我得到一个带有NULL值的行:

Sequence HTML
-------- ----
70000    NULL

查询SELECT Field FROM #RawResults WHERE Date = '2011-05-01'不返回任何结果,因此即使在WHERE子句中没有匹配值,似乎作用于非文字的UDF也会导致SQL返回一行。这是一个奇怪的边缘情况,或者这是否因为今天早上逃脱我的某些原因而完全有意义?

1 个答案:

答案 0 :(得分:5)

第二个有一个聚合SUM而没有GROUP BY =总是返回一行

请在此处查看我的回答:Does COUNT(*) always return a result?