SQL - отображение нулевых результатов - PullRequest
0 голосов
/ 08 июля 2010

Я хочу отобразить 'O' или 'Результаты не найдены', когда по моему запросу не найдено записей, но я не могу сделать это правильно. Я думаю, что проблема заключается в том, что я пытаюсь отобразить информацию о записях, которые я считаю, а также о том, сколько их соответствует критериям. Возможно, дело не в том, что мне нужно изменить с помощью ISNULL, а в том, чтобы изменить результат, если строки не выводятся.

Спасибо за любую помощь заранее.

select t3.countyname, t2.titleunitname, t1.transdesc, count (isnull(t3.orderkey,0)) as c1
        from tblorder as t3
        left join qryOrderRecord1 as t1 on t3.OrderKey = t1.OrderKey
        left join qrytitleunits as t2 on t3.titleunitnum = t2.titleunitnum
        WHERE t1.transdesc = 'LETTERS'
        AND (t3.OrderDateTime between '7/7/2010' AND '7/7/2010')
        AND t3.countyname = 'Frankfurt'
        AND t2.titleunitname = 'Maxwell'
        group by t3.countyname,t1.transdesc, t2.titleunitname

Ответы [ 3 ]

2 голосов
/ 08 июля 2010

То, что count(isnull(column, 0)) совпадает с count(1) или count(*).См. Этот вопрос, почему ...

Количество (*) против количества (1)

Может быть, вы хотите count(t1.orderkey)?Это не будет считать нулевой t1.orderkey's.

2 голосов
/ 08 июля 2010

Я думаю, вам нужно посчитать t1.orderkey t3 находится слева от внешнего соединения, поэтому t1.orderkey значения будут NULL.

Также я переместил фильтры на t1 и t2 в условия JOIN, а не в WHERE условие

Если это не сработает, вам помогут примеры данных в вашем вопросе.

SELECT t3.countyname,
    t2.titleunitname,
    t1.transdesc    ,
    COUNT(t1.orderkey) AS c1 /*As dotjoe's answer suggests*/
FROM tblorder                     AS t3
    LEFT JOIN qryOrderRecord1     AS t1
    ON  t3.OrderKey  = t1.OrderKey
    AND t1.transdesc = 'LETTERS'
    LEFT JOIN qrytitleunits AS t2
    ON  t3.titleunitnum  = t2.titleunitnum
    AND t2.titleunitname = 'Maxwell'
WHERE t3.OrderDateTime BETWEEN '7/7/2010' AND '7/7/2010' /*Seems odd! Should these be 
                                                           different dates?*/
AND t3.countyname = 'Frankfurt'
GROUP BY t3.countyname,
    t1.transdesc      ,
    t2.titleunitname
0 голосов
/ 09 июля 2010

Дайте этому шанс.

select t3.countyname, t2.titleunitname, t1.transdesc, count (isnull(t3.orderkey,0)) as c1 
into #Tmp
from tblorder as t3 
    left join qryOrderRecord1 as t1 on t3.OrderKey = t1.OrderKey 
    left join qrytitleunits as t2 on t3.titleunitnum = t2.titleunitnum 
where t1.transdesc = 'LETTERS' 
  AND (t3.OrderDateTime between '7/7/2010' AND '7/7/2010') 
  AND t3.countyname = 'Frankfurt' 
  AND t2.titleunitname = 'Maxwell' 
group by t3.countyname,t1.transdesc, t2.titleunitname 

if @@ROWCOUNT > 0
    select *
    from #Tmp
else
    select 'No Results Found.'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...