-1

SOのメンバーの1人が親切にそれを解決するのを手伝ってくれる、労働日の賃金とカウント数を計算するための実用的なSQLステートメントがあります。しかし問題は、その期間に取り組んだ労力だけ結果が出てくることです。私が本当に望んでいるのは、彼がその期間に働いたかどうかに関係なく、結果がすべての労働を (tbl_labor で) 示さなければならないということです。

select
  lab.lb_name,
  max(days),
  sum(prod.pdtn_qty * pdWk.pd_cost / 12) as Total 
from
  tbl_labor as lab,
  tbl_production as prod,
  tbl_pdWk_process as pdwk,

(select pdn2.lb_id, count(pdn2.lb_id) as days from
  (select  lb_id
  from tbl_production  pdn1
  where pdn1.pdtn_date >= #9/5/2012#
  and   pdn1.pdtn_date <= #2012-09-20#
  group by lb_id, pdtn_date ) as pdn2
     group by pdn2.lb_id) as pdn3

where prod.pdtn_date >= #9/5/2012#
and   prod.pdtn_date <= #2012-09-20#
and prod.lb_id = lab.lb_id
and   prod.pd_making_id = pdwk.pd_making_id
and lab.lb_id = pdn3.lb_id
group by lab.lb_name

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

tbl_labor
 lb_id | lb_name  | lb_OT ($/day) | If_social_sec
   1   |  John    |    10         |    yes
   2   |  Mary    |    10         |    no
   3   |  Jane    |    10         |    no

tbl_production 
pdtn_date  | lb_id  | pdtn_qty(pcs) | pd_making_id 
 5/9/12    |   1    |     200       |    12
 5/9/12    |   1    |     40        |    13
 5/9/12    |   2    |     300       |    12
 7/9/12    |   1    |     48        |    13
 13/9/12   |   2    |     220       |    14
 15/9/12   |   1    |     20        |    12
 20/9/12   |   1    |     33        |    14
 21/9/12   |   2    |     55        |    14
 21/9/12   |   1    |     20        |    12

tbl_pdWk_process 
pd_making_id | pd_cost($/dozen) | pd_id 
    12       |     2            |   001
    13       |     5            |   001
    14       |     6            |   002
4

1 に答える 1

4

古いスタイルの結合を置き換えます

from
  tbl_labor as lab,
  tbl_production as prod,
...
where 
  lab.fld1 = prod.fld1

新しい LEFT JOIN で

from
  tbl_labor as lab
  LEFT JOIN tbl_production as prod ON lab.fld1 = prod.fld1
...

編集:
元のコードで

from
  tbl_labor as lab,
  tbl_production as prod
...
where ...
prod.lb_id = lab.lb_id
...

tbl_production テーブルと tbl_labor テーブルの間に内部結合を作成します。新しいスタイルの LEFT JOIN に置き換える必要があります

from
  tbl_labor as lab
  LEFT JOIN tbl_production as prod ON lab.lb_id = prod.lb_id
...

SQL JOIN については、http://www.w3schools.com/sql/sql_join.aspで読むことができます。

于 2012-09-26T09:40:18.563 に答える