Почему я получаю либо ноль строк, либо строку со значением NULL, просто изменив предложение SELECT? - PullRequest
1 голос
/ 02 мая 2011

Я столкнулся с чем-то неожиданным только сейчас, и это напомнило мне, что я все еще многого не знаю о SQL.

У меня есть отчетный запрос, который использует UNION ALL для объединения результатов для разных диапазонов дати сохраните их в форме HTML во временной таблице.Запрос дал значение NULL для диапазона MTD сегодня, так как 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' не даст результатов, поэтомукажется, что UDF, действующий на не-литерал, заставляет SQL возвращать строку, даже если в предложении WHERE нет соответствующего значения.Это какой-то странный крайний случай, или это имеет смысл по какой-то причине, которая ускользает от меня сегодня утром?

1 Ответ

5 голосов
/ 02 мая 2011

2-й имеет совокупную сумму без GROUP BY = всегда возвращается одна строка

Смотрите мой ответ здесь: Всегда ли COUNT (*) возвращает результат?

...