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

1 t-sql sql-server 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'
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sequence HTML
-------- ----
70000    NULL
Run Code Online (Sandbox Code Playgroud)

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

gbn*_*gbn 5

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

在这里查看我的答案:COUNT(*)总是返回结果吗?