2011-10-03 3 views
0

내가 가진 그 같은 요청에 두 번째 쿼리를 추가하려면이MySQL은 복잡한

내가 그것을 할 수있는 방법을 places.position_name when workers.position2 = places.position_id의 선택을 추가 할 그것을 수정해야
kind of request: 
    SELECT employers.employer_name, p.position_name, 
     SUM(CASE WHEN w.type = 2 THEN 1 ELSE 0 END) AS booked, 
     SUM(CASE WHEN (w.type = 3 OR w.type = 31) THEN 1 ELSE 0 END) AS placed 
     FROM places AS p 
       LEFT JOIN employers ON employers.id = places.employer 
      LEFT JOIN (
      SELECT 
       w.id, 
       w.user_id, 
       CASE x.pos WHEN 1 THEN w.pos1 ELSE w.pos2 END AS position, 
       CASE w.type 
       WHEN 39 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END 
       ELSE w.type 
       END AS type 
      FROM workers AS w 
       CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x 
     ) AS w 
      ON w.position = p.pos_id 
     GROUP BY p.pos_id, p.pos_name 
     ORDER BY p.emp_id ASC, p.pos_id ASC 

?

답변

0

places.position_id가 places.pos_id와 같은 열인지 여부와 workers.position2가 workers.pos2와 같은지 여부는 약간 분명하지 않습니다. 어쨌든, 나는 그들이 질문에 기술 된 것과 똑같지 않다고 가정했습니다.

이 갈 줄 -이 위치 2 대 pos_name과 POS2 대 position_name에 따라 약간의 열 조정이 필요할 수 있습니다 :

SELECT employers.employer_name, p.position_name, 
    case when w.position2 = p.position_id then p.position_name else 'no worker position found' end as worker_position_name, 
    SUM(CASE WHEN w.type = 2 THEN 1 ELSE 0 END) AS booked, 
    SUM(CASE WHEN (w.type = 3 OR w.type = 31) THEN 1 ELSE 0 END) AS placed 
    FROM places AS p 
      LEFT JOIN employers ON employers.id = places.employer 
     LEFT JOIN (
     SELECT 
      w.id, 
      w.user_id, 
      CASE x.pos WHEN 1 THEN w.pos1 ELSE w.pos2 END AS position, 
      CASE w.type 
      WHEN 39 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END 
      ELSE w.type 
      END AS type, 
      w.pos2 
     FROM workers AS w 
      CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x 
    ) AS w 
     ON w.position = p.pos_id 
    GROUP BY p.pos_id, p.pos_name,w.position2,p.position_id,p.position_name 
    ORDER BY p.emp_id ASC, p.pos_id ASC; 

행운을 빕니다!