Left join with conditions

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Pelle Pels

    Left join with conditions

    Hi.

    I have three tables KUNDR, ORDRA, ARTIK.
    I want to have sum of orders, grouped by costumers (KUNDR), and showing all costumers even if no orders that period.
    My script here works, but its gave me all artikels (artik.grupp) if when I try to set criteria on artik
    (select grupp, nr from artik where artik.grupp = 5)

    How do I solve this so I can get all costumers every time even if I have critera on artik.grupp?

    Thanks in advance /pellepels@gmail .com

    Code:
    SELECT KUNDR.NR AS Nr, SUM(ORDRA.TOT_LEV_ANTAL) AS Summa
    FROM KUNDR LEFT JOIN ORDRA ON KUNDR.NR = ORDRA.KUND_NR AND ORDRA.LEV_DATUM >= '2010-09-13' AND ORDRA.LEV_DATUM <= '2010-09-17' 
    LEFT  JOIN (select grupp, nr from artik where artik.grupp = 5) artikA ON artikA.NR = ORDRA.ART_NR
    WHERE KUNDR.NR IN(SELECT NR FROM KUNDR WHERE SPARR_KOD = 'N') 
    GROUP BY KUNDR.NR
  • Pelle pels

    #2
    :-)
    I solved it, by trial end error, searching google, and subqueries.

    Maybe not best solution but it works.
    Pelle Pels

    Code:
    SELECT KUNDR.NR, sum(subQ.summa) FROM KUNDR
    LEFT JOIN (select ORDRA.KUND_NR, SUM(ORDRA.TOT_LEV_ANTAL) as summa
    from ORDRA LEFT JOIN ARTIK ON ARTIK.NR = ORDRA.ART_NR
    WHERE ORDRA.LEV_DATUM >= '2010-08-01' AND ORDRA.LEV_DATUM <= '2010-08-31' AND ARTIK.GRUPP IN ('1','5','6')
    group by ORDRA.KUND_NR) subQ on KUNDR.NR = subQ.kund_nr
    Where KUNDR.NR IN(SELECT NR FROM KUNDR WHERE SPARR_KOD = 'N') 
    group by KUNDR.NR order by nr

    Comment

    • Pelle Pels

      #3
      Better : Removed double sum, no need for that.

      Code:
      SELECT KUNDR.NR, KUNDR.NAMN, ISNULL(subQ.subSumma,0) as summa FROM KUNDR
      LEFT JOIN (
      select ORDRA.KUND_NR, SUM(ORDRA.TOT_LEV_ANTAL) as subSumma
      from ORDRA LEFT JOIN ARTIK ON ARTIK.NR = ORDRA.ART_NR
      WHERE ORDRA.LEV_DATUM >= '$DATE_FROM$' AND ORDRA.LEV_DATUM <= '$DATE_TO$' AND ARTIK.GRUPP IN ($GRUPPNR$)
      group by ORDRA.KUND_NR) as subQ on KUNDR.NR = subQ.kund_nr
      WHERE KUNDR.NR IN(SELECT NR FROM KUNDR WHERE SPARR_KOD = 'N') 
      order by NR

      Comment

      Working...