2017-06-17 5 views
1

unionを使用して別のテーブルから別の列のcount(*)を取得しようとしています。 status_status = Stitchすべき他の二つのテーブルとINNER JOINとは取らとanarkalistitching_workerの合計数を取得するテーブルtbl_unit_statusからユニオンの異なる列の数と同じ行に表示する

//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 

必要な出力は、

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

である私は、上記の出力を得ることを試みてきたが、捕まってしまいました。以下は、上記のコードの出力は必要な出力を取得する方法を、

churidar anarkali stitching_worker 
---------------------------------------- 
    1   0    AA 
{null}  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 

、私のコードです。私はたくさん試しました。答えを見つけるのを助けてください。ありがとうございました。

答えて

2

正しく理解していれば、最初の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

それは働く男です。どうもありがとう。 –

関連する問題