2017-09-20 4 views
1

그룹 집계가 null과 0이있는 단일 레코드 대신 0 레코드가되는 경우 SQL Server는 레코드를 반환하지 않습니다.집계 된 그룹에 대해 단일 null 레코드 대신 0 레코드를 반환하도록 SQL Server 쿼리 가져 오기?

문제 SQL 문 :

select 
    Max(InterfaceID), Count(*) 
from 
    (select InterfaceID 
    from interface 
    where interfaceid = 99) as Interfaces 

문제 결과

+-------+---------+ 
| i_max | i_count | 
+-------+---------+ 
| NULL |  0 | 
+-------+---------+ 

예하다면 지정하여 그룹

select 
    Max(InterfaceID), Count(*) 
from 
    (select InterfaceID 
    from interface 
    where interfaceid = 99) as Interfaces 
group by 
    interfaceid 

결과 :

+-------+---------+ 
| i_max | i_count | 
+-------+---------+ 

첫 번째 쿼리에서 두 번째 결과를 얻을 수 있습니까?

이것은 Entity Framework 모델과 배열 1 대신 빈 데이터를 처리하는 데이터가 기록하기는하지만 거의 사용되지 않기 때문입니다. 당신은 또한 GROUP BY()을 추가 할 수 있습니다 HAVING에 대한 대안으로

select Max(InterfaceID), Count(*) 
from (
    select InterfaceID from interface where interfaceid=99 
) as Interfaces 
having Max(InterfaceID) is not null 
+1

having 절을 추가하십시오. MAX (InterfaceID)> 0 또는 그 행을 따르는 것과 같이 실제 데이터에 적용되는 것이 무엇이든지간에. –

+0

전달한 쿼리 모두 GROUP BY 절이 있으며 0 행을 반환합니다. 첫 번째 쿼리에서 GROUP BY를 생략하고 서브 쿼리를 요약하는 경우 (null, 0)의 단일 행이 올바른 결과라고 가정합니다. 직면 한 EF 문제에 대해 자세히 설명해 주시겠습니까? –

+0

thanks - 첫 번째 쿼리에서 GROUP BY가 제거되었습니다. – Maze

답변

2

당신은 당신이 같은 쿼리 수정할 수 있습니다 그렇지 않으면 입력의 모든 행을 집계합니다.

SELECT MAX(InterfaceID), 
     COUNT(*) 
FROM  (SELECT InterfaceID 
       FROM interface 
       WHERE interfaceid = 99) AS Interfaces 
GROUP BY() 
+0

위대한 작품입니다. – Maze

0

- - 입력에 일치하는 행 또는 단일 행 결과가 없었다 경우 아래 0 행을 반환합니다