2016-09-15 1 views
0

私は、従業員が現在の年のために持っていて持っていたメリットに基づいて、登録フォームを作成することを任されました。完全なレポートの各ページには、個々の従業員ごとの情報が表示され、上部に標準情報が表示され、利用可能なすべての給与タイプのリストが表示され、その列に従業員が現在支払っている金額その種類のカバレッジこの列が空白の場合、その従業員はそのカバレッジを持っていません。SSRSフォーム/レポートと外部の参加結果

これは、フォームは次のようになります。私は左の外側には、従業員を含め、それらの行の一部をマスターメリットテーブルからすべての給付タイプの行を返す加入採用クエリを書いた enter image description here

1人の従業員の情報と支払い額。複数の従業員の結果を取得するためにクエリを変更すると、結果セットには余分な従業員が払っている給付の追加行のみが含まれます。私は、総行数=従業員数*利益の数になるようにデータセットを工夫する必要があると私は考えています。多分私は間違った方法でこれについて行くつもりです。

高いと低いが検索されたコミュニティに手を差し伸べる必要があると感じました。ええ、初めてのlurkerのポスト。うまくいけば、私の状況ははっきりと簡潔に説明されています。

EDIT:ここに私が1人で探している結果を取得するSQLがあります。私が追加の従業員を頼むと、彼らは支払う便益のために行を返すだけです。給付テーブルには、従業員が支払う利益のための行しかありません。 pr_deduction_masterテーブルにはすべての利点があります。コードの指定について私に尋ねないでください...この実装はいくつかの点ではうまくいきませんでした。

select emp.a_name_last + ', ' + emp.a_name_first as 'Name', emp.a_employee_number, emp.e_ssn, emp.e_email, 
    emp.ed_p_address1, emp.ed_p_address_city, emp.ed_p_address_state, emp.ed_p_address_zip, 
    a.a_deduction_code, a.a_ded_desc_long, b.a_employee_number, b.dh_emp_amount 
from 
(select distinct a_deduction_code, a_ded_desc_long from pr_deduction_master where a_deduction_code in 
(2000,2005,2007,2008,2010,2015,2020,2025,2027,2030,2040,2045, 
2050,8055,8205,8210,8215,8220,8225,8230,8235,8240,8245,8250, 
8252,8253,8255,8260,8280,8290,8295,8300,8305,8310,8315,8316, 
8700,8701,8702,9100,9150,9151,9200)) a 
left outer join 
(select distinct a_employee_number, a_deduction_code, dh_emp_amount from pr_ded_history where a_employee_number in (603) and dh_pr_warr like '10816A') b 
on a.a_deduction_code = b.a_deduction_code 
left outer join 
(select a_employee_number, a_name_last, a_name_first, ed_p_address1, ed_p_address_city, ed_p_address_state, ed_p_address_zip, e_ssn, e_email 
from pr_employee_master) emp 
on b.a_employee_number = emp.a_employee_number 
order by a_ded_desc_long 

私はこれが誰かをあまりにも怒らせることを望みます。初心者はここでより良くしようとしています。これらの提案を検討します。本当に応答を感謝します。

EDIT 2:ダニエル・Eのアドバイスに従い、クロスは、以下のように必要なものを私に示して適用する「CROSSは、左の[EmployeeBenefits]のテーブルに参加する前に[メリット]を適用[従業員]を取ります」。

Employee Table and Benefits Table

私は第三のテーブルと結合の変化をしようとすると、各従業員の控除は、月のために記録されている控除履歴テーブルには、私は、望ましくない結果を得ます。私はその3番目のテーブルに参加し、従業員がそのタイプの給付控除を受けなかった行にNULLを表示し、前の期間に支払った給付金額を表示することを検討しています。

+0

私たちはあなたのテーブル構造が何であるか、あなたが何をしているのかを知るためにSQLを投稿しますか? – ajeh

+0

"行の総数=従業員の数*給付の数"なぜ、左外部結合をやっているのですか?それはあなたの問題かもしれません。左の結合は必要なものを与えるはずであり、結合は1つだけ必要です。従業員は参加権を残しました。左外部結合は、あなたがあなたのステートメントに近づいていない行を排除していることを示唆しています。 ...しかしええ。いくつかのサンプルデータを投稿し、ヘルプが必要な場合はテーブル構造を投稿してください。 – xenapan

+0

いくつかのスキーマ情報がここで役に立ちます。あなたのソーステーブルはどのように見えますか?いくつかのサンプルデータも良いでしょう。給付テーブルには、従業員が支払う各給付または$ 0を支払う行がありますか? – SMM

答えて

1

達成しようとしていたことを達成するために、私はDaniel E.が言ったことに近いところに行った。

[従業員] CROSS [EmployeeBenefits]の テーブルに左結合する前に[メリット]を適用取る - ダニエルE.

違いは、私はCROSS JOINをutitilizedということでした。私が[EmployeeBenefits]テーブルに参加したままになっても、テーブルにフィルタを適用しようとしていたので、まだ難しかったです。そのテーブルをINNER JOINにしました。これは、フィルタを使用してそのテーブルに対してクエリをネストすることで解決されました。

ご迷惑をおかけして申し訳ありません。

関連する問題