私はSQL Serverを初めて使用し、ビューに列を作成し、内部結合、左外部結合などを使用する2つの選択ステートメントの結合から作成されたビューを使用しています)。以下のスクリプトを参照してください。
行を追加しました
(SUM(PR.amount) OVER (PARTITION BY YEAR(PR.posting_date), PR.lease_id, E.expense_id)) as Annual
個々の毎月の支出の年間合計を示す列を作成します。残念ながら、SUM
ラインはユニオンの両方の部分にあるため、望ましい結果が得られません。posting_date
とが同じ場合、年次列の合計は同じになりますlease_id
。expense id
ただし、これらのパラメーターがすべて一致する場合でも、和集合の一方の半分の項目の合計は、和集合の他方の半分の項目とは異なります。
基本的に私がする必要があるのは(私が思うに)、ユニオンが完了した後に年次列を作成して、合計関数が計算を行うときにユニオンの両方の部分からすべてのアイテムを確認できるようにすることです。全体を a に入れ子にして、ユニオンの 2 つの部分から行SELECT
を移動することを考えてSUM
いますが、これが機能するかどうか、または正しいアプローチかどうかはわかりません。
アドバイスをいただきありがとうございます。
create view xyz
as
SELECT PR.amount_currency_code, CASE WHEN P.lease_payment_id IS NULL THEN PR.amount ELSE P.amount END AS amount,
CASE WHEN P.lease_payment_id IS NULL THEN PR.gl_code ELSE P.gl_code END AS gl_code,
CASE WHEN PR.one_time_expense_flag = 0 THEN 'N' ELSE 'Y' END AS One_Time_Flag,
dbo.UDF_getRentSummaryVendor(E.expense_id, P.lease_payment_id, PR.lease_projection_id) AS vendor,
dbo.UDF_getRentSummaryVendorNo(E.expense_id, P.lease_payment_id, PR.lease_projection_id) as vendor_no,
PS.name AS Payment_Status, PR.lease_id, PR.row_id, EC.name AS Expense_Category, P.payment_status_id,
PR.lease_projection_id, E.expense_status_id, PR.posting_date,
PR.scheduled_payment_date AS payment_date, PR.expense_category_id,
3 AS alloc_type,
'Non-Standard' AS alloc_type_desc,
'Check Details' as checkdetail,
(SUM(PR.amount) OVER (PARTITION BY YEAR(PR.posting_date), PR.lease_id, E.expense_id)) as Annual
FROM dbo.la_tbl_lease_projection AS PR INNER JOIN
dbo.la_tbl_lease AS L ON PR.lease_id = L.lease_id INNER JOIN
dbo.la_tlu_lease_status AS LS ON L.status_id = LS.status_id INNER JOIN
dbo.la_tlu_held_by AS HB ON L.heldby_id = HB.heldby_id INNER JOIN
la_tbl_lease_proj_nonstd_alloc AS PA on PA.lease_projection_id = PR.lease_projection_id and PA.menu_id_key = PA.menu_id_key and PA.percentage > 0 LEFT OUTER JOIN
dbo.la_tbl_expense AS E ON E.expense_id = PR.expense_id LEFT OUTER JOIN
dbo.la_tbl_lease_payment AS P ON PR.lease_projection_id = P.lease_projection_id LEFT OUTER JOIN
dbo.la_tlu_payment_status AS PS ON P.payment_status_id = PS.payment_status_id LEFT OUTER JOIN
dbo.la_tlu_expense_category AS EC ON PR.expense_category_id = EC.expense_category_id
WHERE (PR.IsDeleted = 0) AND (E.IsDeleted = 0 OR
E.IsDeleted IS NULL)
and HB.system_type <> '2' and HB.IsDeleted = 0
union
SELECT PR.amount_currency_code, CASE WHEN P.lease_payment_id IS NULL THEN PR.amount ELSE P.amount END AS amount,
CASE WHEN P.lease_payment_id IS NULL THEN PR.gl_code ELSE P.gl_code END AS gl_code,
CASE WHEN PR.one_time_expense_flag = 0 THEN 'N' ELSE 'Y' END AS One_Time_Flag,
dbo.UDF_getRentSummaryVendor(E.expense_id, P.lease_payment_id, PR.lease_projection_id) AS vendor,
dbo.UDF_getRentSummaryVendorNo(E.expense_id, P.lease_payment_id, PR.lease_projection_id) as vendor_no,
PS.name AS Payment_Status, PR.lease_id, PR.row_id, EC.name AS Expense_Category, P.payment_status_id,
PR.lease_projection_id, E.expense_status_id, PR.posting_date,
PR.scheduled_payment_date AS payment_date, PR.expense_category_id,
CASE WHEN STDALLOC.menu_id_key IS NULL THEN 1 ELSE 2 END AS alloc_type,
CASE WHEN STDALLOC.menu_id_key IS NULL THEN 'None' ELSE 'Standard' END AS alloc_type_desc,
'Check Details' as checkdetail,
(SUM(PR.amount) OVER (PARTITION BY YEAR(PR.posting_date), PR.lease_id, E.expense_id)) as Annual
FROM dbo.la_tbl_lease_projection AS PR INNER JOIN
dbo.la_tbl_lease AS L ON PR.lease_id = L.lease_id INNER JOIN
dbo.la_tlu_lease_status AS LS ON L.status_id = LS.status_id INNER JOIN
dbo.la_tlu_held_by AS HB ON L.heldby_id = HB.heldby_id LEFT OUTER JOIN
la_tbl_area_allocation AS STDALLOC on STDALLOC.area_allocation_term_id in
(select area_allocation_term_id from la_tbl_area_allocat_term ALLOC_TERM
where start_date = (select max(start_date) from la_tbl_area_allocat_term IN_ALLOC_TERM
where area_term_id in (select area_term_id from la_tbl_area_term TERM where PR.posting_date between TERM.start_date
and TERM.end_date and PR.lease_id = TERM.lease_id and TERM.isdeleted = 0)
and PR.posting_date between IN_ALLOC_TERM.start_date and IN_ALLOC_TERM.end_date)
AND area_allocation_term_id = (select max(area_allocation_term_id) from la_tbl_area_allocat_term IN_ALLOC_TERM
where area_term_id in (select area_term_id from la_tbl_area_term TERM where PR.posting_date >= TERM.start_date
and PR.posting_date between TERM.start_date and TERM.end_date and PR.lease_id = TERM.lease_id and TERM.isdeleted = 0)
and PR.posting_date between IN_ALLOC_TERM.start_date and IN_ALLOC_TERM.end_date
and IN_ALLOC_TERM.start_date = (select max(start_date) from la_tbl_area_allocat_term INN_ALLOC_TERM
where area_term_id in (select area_term_id from la_tbl_area_term TERM where PR.posting_date >= TERM.start_date
and PR.posting_date between TERM.start_date and TERM.end_date and PR.lease_id = TERM.lease_id and TERM.isdeleted = 0)
and PR.posting_date between INN_ALLOC_TERM.start_date and INN_ALLOC_TERM.end_date))
and PR.posting_date >= ALLOC_TERM.start_date and PR.posting_date <= ALLOC_TERM.end_date
and ALLOC_TERM.isdeleted = 0)
and STDALLOC.percentage > 0
LEFT OUTER JOIN
dbo.la_tbl_expense AS E ON E.expense_id = PR.expense_id LEFT OUTER JOIN
dbo.la_tbl_lease_payment AS P ON PR.lease_projection_id = P.lease_projection_id LEFT OUTER JOIN
dbo.la_tlu_payment_status AS PS ON P.payment_status_id = PS.payment_status_id LEFT OUTER JOIN
dbo.la_tlu_expense_category AS EC ON PR.expense_category_id = EC.expense_category_id
WHERE (PR.IsDeleted = 0) AND (E.IsDeleted = 0 OR
E.IsDeleted IS NULL)
and HB.system_type <> '2' and HB.IsDeleted = 0
and PR.lease_projection_id not in (select distinct(lease_projection_id) from la_tbl_lease_proj_nonstd_alloc where isdeleted = 0)
GO