2017-06-17 54 views
1

我试图从union获取不同列的不同列的count(*)计算不同的列在同一行中并显示在同一行中

//tbl_churidar 

order_id order_no_first order_no 
-------------------------------------- 
    1    C    1000 
    2    C    1001 
    3    C    1002 

//tbl_anarkali 

order_id order_no_first order_no 
-------------------------------------- 
    1    A    1003 
    2    A    1004 
    3    A    1005 

//tbl_assign 

assign_id order_id order_no_first 
--------------------------------------- 
    1   1    C 
    2   1    A 
    3   2    C 
    4   3    C 
    5   2    A 
    6   3    A 

//tbl_unit_status 

status_id assign_id status_status stitching_worker 
----------------------------------------------------------- 
    1   1   Stitch    AA 
    2   2    QC    {null} 
    3   3   Stitch    BB 
    4   4   Stitch    BB 
    5   5   Stitch    AA 
    6   6   Stitch    CC 

从表tbl_unit_status其中status_status = Stitch应该INNER JOIN与另外两个表,并获得和anarkali每个stitching_worker采取的总数。

所需的输出,

churidar anarkali stitching_worker 
---------------------------------------- 
    1   1    AA 
    2   0    BB 
    0   1    CC 

我试图得到上面的输出,但卡住了。下面是我的代码,

SELECT churidar, anarkali, stitching_worker 
    FROM ((
      SELECT count(*) AS churidar, NULL AS anarkali, 
      us.stitching_worker 
      FROM tbl_unit_status us 
      INNER JOIN tbl_assign a ON a.assign_id = us.assign_id 
      INNER JOIN tbl_churidar o ON 
       (o.order_id = a.order_id AND 
        o.order_no_first = a.order_no_first) 
      INNER JOIN tbl_contacts c ON c.contacts_id = o.contacts_id 
      LEFT JOIN tbl_title t ON t.title_id = c.title_id 
      WHERE us.status_status = "Stitch" AND 
        o.order_no_first = "C" 
      GROUP BY us.stitching_worker 
     ) 
     UNION (
      SELECT NULL AS churidar, count(*) AS anarkali, 
        us.stitching_worker 
      FROM tbl_unit_status us 
      INNER JOIN tbl_assign a ON a.assign_id = us.assign_id 
      INNER JOIN tbl_anarkali o ON (
         o.order_id = a.order_id AND 
         o.order_no_first = a.order_no_first) 
      INNER JOIN tbl_contacts c ON c.contacts_id = o.contacts_id 
      LEFT JOIN tbl_title t ON t.title_id = c.title_id 
      WHERE us.status_status = "Stitch" AND 
       o.order_no_first = "A" 
      GROUP BY us.stitching_worker 
     ) 
     ) AS T1 

输出上面的代码是,

churidar anarkali stitching_worker 
---------------------------------------- 
    1   0    AA 
{null}  1    AA 
    2   0    BB 
    0   1    CC 

如何获得所需的输出。我尝试了很多。帮我找到答案。谢谢。

回答

2

如果我理解正确(我可能不会),你不需要前两个表。你可以从tbl_assign得到你需要的信息,只需要使用聚合:

select us.stitching_working, 
     sum(a.order_no_first = 'C') as churidar, 
     sum(a.order_no_first = 'A') as anarkali 
from tbl_unit_status us join 
    tbl_assign a 
    on us.assign_id = a.assign_id 
where us.status_status = 'Stitch' 
group by us.stitching_working; 
+0

我会试一试。 –

+0

这是工作的人。非常感谢。 –

相关问题