sql >> Database >  >> RDS >> Mysql

Tel gegevens uit meerdere tabellen met SUM

In plaats van lid te worden van tbl_workers je zou kunnen aansluiten bij de niet-gedraaide variant waar position en position2 zou in dezelfde kolom staan, maar in verschillende rijen.

Zo zou het ongedaan maken van de draai eruit kunnen zien:

SELECT
  w.id,
  w.name,
  CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
  w.status
FROM tbl_workers AS w
  CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x

Dit is de volledige zoekopdracht, die in feite uw oorspronkelijke zoekopdracht is, waarbij de bovenstaande zoekopdracht de tbl_workers vervangt tafel:

SELECT p.id, 
  p.position, 
  SUM(CASE w.Status WHEN 2 THEN 1 ELSE 0 END)  AS booked,
  SUM(CASE w.Status WHEN 3 THEN 1 ELSE 0 END)  AS placed
FROM tbl_positions AS p
  LEFT JOIN (
    SELECT
      w.id,
      w.name,
      CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
      w.status
    FROM tbl_workers AS w
      CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
  ) AS w 
  ON w.position=p.id
GROUP BY p.id, p.position

UPDATE

Dit is een aangepast script volgens aanvullend verzoek in opmerkingen:

SELECT p.id, 
  p.position, 
  SUM(CASE w.Status WHEN 2 THEN 1 ELSE 0 END)  AS booked,
  SUM(CASE w.Status WHEN 3 THEN 1 ELSE 0 END)  AS placed
FROM tbl_positions AS p
  LEFT JOIN (
    SELECT
      w.id,
      w.name,
      CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
      CASE w.status
        WHEN 4 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END
        ELSE w.status
      END AS status
    FROM tbl_workers AS w
      CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
  ) AS w 
  ON w.position=p.id
GROUP BY p.id, p.position

Het idee is om de 4 . te vervangen status in de subselectie met 3 of 2 afhankelijk van of we op dit moment position . moeten halen of position2 als de verenigde position . De buitenste select blijft dezelfde logica gebruiken als voorheen.



  1. MYSQL Groeperen op kolom met 2 rijen voor elke groep

  2. DeleteDatabase wordt niet ondersteund door de provider, Oracle met Entity Framework

  3. Van XML binnen CLOB naar Oracle-tabel met lijst met paden

  4. PHP Meerdere rijen verwijderen met selectievakje