0

empolyeesから情報を取得する必要がありemployees table、2つの異なるテーブルからそれらの合計賃金を取得する必要があります。

SQLはほぼこのようなものですが、結合を使用してこれを行う方法がわかりません。

  • CONCAT(first_name, ' ', last_name) from employees as e
  • Sum(hours*pay) where date is "THIS MONTH" and employee_id = e.id from taxed_work
  • Sum(hours*pay) where date is "THIS MONTH" and employee_id = e.id from nontaxed_work

これらを適切に結合する方法がわかりません。その月にどちらの種類の仕事もしていない従業員は見たくありません。仕事をしている従業員だけを見たいです。私はmysqlを使用しており、phpを使用してデータをテーブルに配置します

誰かが「今月」のパートのやり方を教えてくれたら、それもかっこいいでしょう。その部分で怠惰なだけですが、私がここにいる間に考えました...

助けてくれてありがとう!

4

3 に答える 3

2

相関サブクエリを使用できます。

select  concat(first_name, ' ', last_name)
,       (
        select  sum(hours*pay)
        from    taxed_work tw
        where   tw.employee_id = e.id
                and year(tw.date) = year(now())
                and month(tw.date) = month(now())
        )
,       (
        select  sum(hours*pay)
        from    nontaxed_work ntw
        where   ntw.employee_id = e.id
                and year(ntw.date) = year(now())
                and month(ntw.date) = month(now())
        )
from    employees e
于 2012-09-10T07:52:48.897 に答える
0

サブクエリ内でそれらの合計を計算できます。

SELECT  a.id ,
        CONCAT(first_name, ' ', last_name) FullName,
        b.totalTax,
        c.totalNonTax,
FROM    employees a
        LEFT JOIN 
        (
            SELECT employee_id, Sum(hours*pay) totalTax
            FROM taxed_work
            WHERE DATE_FORMAT(`date`,'%c') = DATE_FORMAT(GETDATE(),'%c')
            GROUP BY employee_id
        )  b ON b.employee_id = a.id
        LEFT JOIN 
        (
            SELECT employee_id, Sum(hours*pay) totalTax
            FROM nontaxed_work
            WHERE DATE_FORMAT(`date`,'%c') = DATE_FORMAT(GETDATE(),'%c')
            GROUP BY employee_id
        ) c ON c.employee_id = a.id
于 2012-09-10T07:53:36.137 に答える
0

このクエリを試してください。

select 
    CONCAT(first_name, ' ', last_name) as employee_name,
    sum(case when t.this_date = 'this_month' then t.hours*t.pay else 0 end), 
    sum(case when n.this_date = 'this_month' then t.hours*t.pay else 0 end) 
from employees e 
    left join taxed_work t on e.id = t.employee_id
    left join nontaxed_work n on e.id = n.employee_id
group by (first_name, ' ', last_name)

正確なテーブル構造がわからないため、t.this_dateフィールドとn.this_dateフィールドを実際のフィールド名に置き換えてください。また、必要に応じて「this_month」の値を置き換えます。

于 2012-09-10T08:01:14.467 に答える