2017-06-17 90 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

這是工作的人。非常感謝。 –

相關問題