2010-07-07 5 views
0

쿼리를 기반으로 레코드를 찾을 수 없지만 올바르게 표시 할 수 없을 때 '결과 없음'또는 '결과 없음'을 표시하려고합니다. 나는 문제가 내가 얼마나 많은 레코드가 그 기준에 맞는 지에 관해서 셀 수있는 레코드에 대한 정보를 표시하려고한다는 점에서 비롯된 것이라고 생각한다. 아마도 ISNULL로 변경해야하는 수는 아니지만 행이 출력되지 않으면 결과를 수정해야합니다.SQL - 제로 결과 표시

사전에 도움을 주셔서 감사합니다.

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 

답변

2

나는 당신이 NULL 될 것 t1.orderkey 값 그래서 가입 t1.orderkey T3는 외부의 왼쪽에 계산 필요가 있다고 생각합니다. 그 도움이 될 것입니다 귀하의 질문에 일부 샘플 데이터를 제공하는 트릭을하지 않는 경우

또한 내가하지 WHERE

JOIN 조건으로 T1과 T2의 필터를 이동했다.

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

+1 예 OP를 사용하면 where 절에 제한을 설정하여 이러한 외부 조인을 내부 조인으로 효과적으로 변환 할 수 있습니다. 좋은 지적. – dotjoe

+0

죄송합니다.이 답변 이후에 내 댓글을 달아야한다는 생각이 듭니다. 아직도 여기에 글을 게시하는 것을 계속하고 있습니다.> _ < – bnw

+0

http://stackoverflow.com/questions/1250819/show-message-when-no-rows-selected-mysql-php SQL 및 PHP php 끝에서해야 할 것 같습니다. 어쨌든 도움을 주셔서 감사합니다. – bnw

2

count(isnull(column, 0))count(1) 또는 count(*) 동일 함. 왜 ...

Count(*) vs Count(1)

은 어쩌면 당신은 count(t1.orderkey)을 원하는이 질문을 참조? 이것은 null t1.orderkey를 계산하지 않습니다.

+0

+1 잘 보입니다. –

+0

SQL 정리에 도움을 주셔서 감사합니다. 나는 내 질문/코드가 내포하는 것이 훨씬 더 간단하다는 것을 깨달았다. 을 PostalCode = '63108' "검색 결과가 없습니다"와 같은 메시지를 표시 할 수있는 방법이 있나요 어떤 결과/행이 경우 발견되지있는 Person.Address FROM 사용하여 AdventureWorks SELECT AddressID
? – bnw

+0

예, 일반적으로 쿼리 소비자가이를 처리합니다. '@@ rowcount = 0 begin '을 선택하면'결과 없음 '을 확인할 수 있다고 가정합니다. end '를 선택합니다. 그러나, 그것은 당신에게 2 개의 결과 세트를 줄 것입니다 ... 처음에는 행이 없습니다. 또는 테이블 변수를 선택하고 행을 확인한 다음 반환 할 결과 집합을 결정합니다. 쿼리를 호출하는 코드가이를 처리하도록하는 것이 훨씬 간단합니다. – dotjoe

0

사진을주세요.

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.'