2013-04-13 5 views
1

SQL 쿼리를 작성하여 모든 카테고리의 합계를 표시하려고합니다. 문제는 모든 범주의 합계가 필요하며 합계가 0 인 경우에도 여전히 결과를 표시해야한다는 것입니다.MS 액세스 쿼리에서 null 값 확인 및 표시

DAL 레이어를 사용하여이 작업을 수행하므로 C#을 통해 액세스 2010 데이터베이스를 사용하고 있습니다.

이 내 현재 작업 쿼리입니다 : 카테고리의 합이 0 인 경우

SELECT  SUM(f.bedrag) AS totaal, c.omschrijving, Limiet.maximumBedrag 
FROM   ((Financien f INNER JOIN 
         Categorie c ON f.categorieId = c.id) INNER JOIN 
         Limiet ON f.limietId = Limiet.id) 
WHERE  (f.inkomstOfUitgave = 1) 
GROUP BY f.categorieId, c.omschrijving, Limiet.maximumBedrag 

이제 SUM 함수의 상단에 나 또한 널 (null)를 확인해야하고, 그것은 0으로 모든 결과를 표시해야 0은 이제 걸러졌지만, 나는 그들을보아야 만합니다.

누구든지 문제를 해결할 방법을 알고 있습니까? IsNull()NZ을 시도했지만 작동하지 못했습니다. 다음은 쿼리 결과의 스크린 샷입니다.

두 가지 결과가 표시되지만 결과에 0 개의 결과가 표시되면 7을 얻어야합니다.

누구든지 이것을 고치는 방법을 알고 있습니까?

답변

0

또한 0 값을 표시하는 답변은 이었습니다. 답변은 "drch"에 의해 만들어졌으며, 나는이 점에 대해 많은 감사를드립니다! :)

SUM(IIF(IsNULL(f.bedrag), 0, f.bedrag)) AS bedrag 

잘못도 다른 많은 것들을이 전체 쿼리입니다이 여기서

SELECT  c.omschrijving as Omschrijving, SUM(IIF(IsNULL(f.bedrag), 0, f.bedrag)) AS bedrag, l.maximumBedrag as maximumBedrag 
FROM   ((Categorie c LEFT OUTER JOIN 
         Financien f ON f.categorieId = c.id) LEFT OUTER JOIN 
         Limiet l ON l.categorieId = c.id) 
WHERE  (f.inkomstOfUitgave IS NULL) OR 
         (f.inkomstOfUitgave = 1) 
GROUP BY c.id, f.categorieId, c.omschrijving, l.maximumBedrag 
1

Access 쿼리에서 Null을 0으로 표시하는 방법에 대한 질문은이 간단한 쿼리를 고려하십시오. SumOfbedrag 열에 Null로 일부 행을 반환합니다. 서브 쿼리 SQL이 사용

SELECT y.categorieId, Sum(y.bedrag) AS SumOfbedrag 
FROM YourTable AS y 
GROUP BY y.categorieId 

, 포함하는 쿼리는 IIf() 식 0 null로 변환 할 수있다.

SELECT 
    sub.categorieId, 
    IIf(sub.SumOfbedrag Is Null, 0, sub.SumOfbedrag) AS totaal 
FROM 
    (
     SELECT y.categorieId, Sum(y.bedrag) AS SumOfbedrag 
     FROM YourTable AS y 
     GROUP BY y.categorieId 
    ) AS sub; 

그러나, 다시 화면에서 찾고 나에게 문제가 쿼리가 totaal 열에서 널을 가진 행을 포함하지 않는 것이 사실이라고 생각합니다. 이 경우 GROUP BY으로 집계하기 전에 기본 데이터를 검사하십시오. 해당 쿼리에 행을 반환하지 않는 경우 ...이 쿼리가 행을 반환하는지 여부

SELECT f.bedrag, c.omschrijving, Limiet.maximumBedrag 
FROM 
    (Financien f 
    INNER JOIN Categorie c 
    ON f.categorieId = c.id) 
    INNER JOIN Limiet 
    ON f.limietId = Limiet.id 
WHERE 
     f.inkomstOfUitgave = 1 
    AND f.bedrag Is Null 

를 참조하십시오, 내 추측은 당신의 하나 또는 둘 모두가 LEFT JOIN 또는 RIGHT JOININNER에서 변경해야 조인 것입니다.

+1

그래, 나도 "좌/우 가입"생각했다. –

+0

먼저, "IS"가 programma에 의해 지원되지 않기 때문에 하위 쿼리가 작동하지 않습니다. ( 두 번째로, 마지막 쿼리를 실행하면 결과적으로 아무런 결과도 얻지 못합니다! 왼쪽 또는 오른쪽 조인? 이 이미지에서 내가 사용하는 세 개의 테이블에 대한 내 DB 구조를 볼 수 있습니다. 조인을 코딩하는 방법을 알려주시겠습니까? 계속 오류가 발생합니다./예 합계가 표시되어야합니다 :) 다른 데이터가 필요합니다! 액세스 테이블 구조 : http://i.imgur.com/MWs4hm8.png – Yenthe

+0

* "우선,"IS "는 프로그램에서 지원되지 않으므로 하위 쿼리가 작동하지 않습니다."* 테이블을 만든 다음 Access 2007에서 해당 쿼리를 만들고 테스트 한 다음 SQL 텍스트를 복사 한 다음 대답을 붙여 넣었다. 그것은 유효한 액세스 SQL – HansUp