0

「生産レポート」を作成するには、多くのテーブルを結合して、各ロットで生産された製品ラインの数量の合計と、各ラインで生産された最新の活動を調べる必要があります。

別の SQL クエリでデータを合計して MAX アクティビティを調べることができますが、それらを結合すると、クエリでエラーが表示されます。ですから、私を助けていただけませんか。どうもありがとうございました。

私のテーブルは以下です:

tbl_pdtn_startup
pdtn_st_id | pd_id | pdtn_st_date
   3       |  001  |  3/9/12
   4       |  002  |  4/9/12

tbl_pdtn_sizecolor
pdtn_szcl_id | pdtn_st_id | pdtn_st_color | pdtn_st_size | pdtn_st_qty_est
    23       |    3       |   Blue        |    S         |    100
    26       |    3       |   Pink        |    S         |    100
    27       |    3       |   Green       |    S         |    100
    28       |    4       |   Blue        |    M         |    200
    30       |    4       |   Green       |    M         |    200


tbl_production
pdtn_id | pdtn_szcl_id | pdtn_st_id | pdtn_date | pd_making_id | lb_id
  24    |     23       |    3       |   4/9/12  |    1         |  12
  26    |     23       |    3       |   5/9/12  |    2         |  12
  27    |     26       |    3       |   4/9/12  |    1         |  15
  28    |     27       |    3       |   5/9/12  |    1         |  15 <--MAX(pdtn_date)
  29    |     28       |    4       |   4/9/12  |    4         |  15
  30    |     30       |    4       |   6/9/12  |    5         |  12 <--MAX(pdtn_date)

tbl_product
  pd_id | Name
   001  | product A
   002  | product B

tbl_pdWk_process
 pd_making_id | wk_stage | pd_id | cost
     1        | step 1   |  001  |  12
     2        | step 2   |  001  |  15
     3        | step 1   |  003  |  12
     4        | step 1   |  002  |  18
     5        | step 2   |  002  |  10

tbl_labor
lb_id | lb_name
 12   | john
 15   | Mary

以下に示すような出力が必要です。

pd_id | pd_name  | pdtn_st_date | sum(pdtn_st_qty_est)*|MAX(pdtn_date)**| wk_stage | lb_name
 001  | product A|   3/9/12     |   300                |   5/9/12       |  step 1  |  Mary
 002  | product B|   4/9/12     |   400                |   6/9/12       |  step 2  | John


* Sum(pdtn_st_qty_est) は、同じ pdtn_st_id (production_startup_id) 内のすべての pdtn_st_qty_est の合計から取得されます (例:- Blue=100、Pink=100、Green=100 for pdtn_st_id = 3)

** MAX(pdtn_date) は最新の作業者が製品ロットごとに行った活動 (例: - 5/9/12 from pdtn_st_id = 3 )

以下は、3つのメインテーブルを一緒に結合しようとしたが失敗した私の試みでした..

SELECT U.pd_id,  A.SumOfpdtn_st_qty_est, S.MaxOfpdtn_date
FROM (tbl_pdtn_startup AS U INNER JOIN 
    [SELECT  Sum(tbl_pdtn_sizecolor.pdtn_st_qty_est) AS SumOfpdtn_st_qty_est FROM tbl_pdtn_sizecolor GROUP BY tbl_pdtn_sizecolor.pdtn_st_id]. AS A ON U.pdtn_st_id = A.pdtn_st_id) 
         INNER JOIN 
        [SELECT Max(tbl_production.pdtn_date) AS MaxOfpdtn_date FROM tbl_production GROUP BY tbl_production.pdtn_st_id]. AS S ON (A.pdtn_szcl_id = S.pdtn_szcl_id) AND (U.pdtn_st_id = S.pdtn_st_id)



私の次の試み:
個別のクエリを作成してそれらを結合するというアイデアを思いつきました。これにより、必要な部分データを生成できます。正しく取得できなかったデータは 2 つだけです。lb_name と wk_stage です。誰でも私を助けることができます。どうもありがとうございました。

q_maxdate

SELECT tbl_pdtn_startup.pdtn_st_id, tbl_pdtn_startup.pd_id, Max(tbl_production.pdtn_date) AS MaxOfpdtn_date, tbl_product.pd_name, tbl_pdtn_startup.pdtn_st_pdNote, tbl_pdtn_startup.pdtn_st_date
FROM (((tbl_pdtn_startup INNER JOIN tbl_pdtn_sizecolor ON tbl_pdtn_startup.pdtn_st_id=tbl_pdtn_sizecolor.pdtn_st_id) INNER JOIN tbl_production ON tbl_pdtn_sizecolor.pdtn_szcl_id=tbl_production.pdtn_szcl_id) INNER JOIN tbl_product ON tbl_pdtn_startup.pd_id=tbl_product.pd_id) INNER JOIN tbl_pdWk_process ON (tbl_production.pd_making_id=tbl_pdWk_process.pd_making_id) AND (tbl_product.pd_id=tbl_pdWk_process.pd_id)
GROUP BY tbl_pdtn_startup.pdtn_st_id, tbl_pdtn_startup.pd_id, tbl_product.pd_name, tbl_pdtn_startup.pdtn_st_pdNote, tbl_pdtn_startup.pdtn_st_date;

次に、このクエリに参加しました...

SELECT q_maxdate.pdtn_st_id, Sum(tbl_pdtn_sizecolor.pdtn_st_qty_est) AS SumOfpdtn_st_qty_est, q_maxdate.MaxOfpdtn_date, q_maxdate.pd_name, q_maxdate.pdtn_st_pdNote, q_maxdate.pd_id, q_maxdate.pdtn_st_date
FROM q_maxdate INNER JOIN tbl_pdtn_sizecolor ON q_maxdate.pdtn_st_id = tbl_pdtn_sizecolor.pdtn_st_id
GROUP BY q_maxdate.pdtn_st_id, q_maxdate.MaxOfpdtn_date, q_maxdate.pd_name, q_maxdate.pdtn_st_pdNote, q_maxdate.pd_id, q_maxdate.pdtn_st_date;
4

1 に答える 1

0

サンプルSQLです。レイバー名がサンプル データと一致していないようです。

SELECT tbl_pdtn_startup.pd_id,
       tbl_product.name,
       tbl_pdtn_startup.pdtn_st_date,
       tbl_pdwk_process.wk_stage,
       tbl_labor.lb_name,
       SUM(tbl_pdtn_sizecolor.pdtn_st_qty_est) AS SumOfpdtn_st_qty_est,
       Max(tbl_production.pdtn_date)           AS MaxOfpdtn_date
FROM   (((tbl_production
          INNER JOIN tbl_labor
                  ON tbl_production.lb_id = tbl_labor.lb_id)
         INNER JOIN (tbl_pdtn_sizecolor
                     INNER JOIN tbl_pdtn_startup
                             ON tbl_pdtn_sizecolor.pdtn_st_id =
                                tbl_pdtn_startup.pdtn_st_id)
                 ON tbl_production.pdtn_szcl_id =
                    tbl_pdtn_sizecolor.pdtn_szcl_id)
        INNER JOIN tbl_pdwk_process
                ON tbl_production.pd_making_id = tbl_pdwk_process.pd_making_id)
       INNER JOIN tbl_product
               ON tbl_pdtn_startup.pd_id = tbl_product.pd_id
GROUP  BY tbl_pdtn_startup.pd_id,
          tbl_product.name,
          tbl_pdtn_startup.pdtn_st_date,
          tbl_pdwk_process.wk_stage,
          tbl_labor.lb_name; 
于 2012-09-04T13:19:25.627 に答える