저는 SQL Server에 익숙하지 않으며보기 및 열에서 열을 만드는 2 개의 SELECT 문의 통합으로 만든보기로 작업하고 있습니다. 내부 조인, 왼쪽 외부 조인 등). 아래 스크립트를 참조하십시오. 복잡한 SQL Server보기에 계산 된 열을 추가해야 함
나는 개인 매달 비용의 연액을 표시하는 열을 생성하는 라인(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
이 같은 경우 연간 열의 합계가 같아야합니다. 그러나 노동 조합의 절반에있는 항목은이 매개 변수가 모두 일치하는 경우에도 나머지 절반의 항목보다 다른 금액을가집니다.
본질적으로 내가해야 할 일은 합계가 계산을 할 때 합계 함수가 모든 항목을 노동 조합의 두 부분에서 보도록 합집합이 완료된 후 연간 열을 만드는 것입니다. 나는 SELECT
에서 모든 것을 중첩하고, 노크의 두 부분에서 SUM
행을 옮기는 것에 대해 생각하고 있습니다. 그러나 이것이 작동하는지 또는 올바른 접근 방법인지는 알 수 없습니다.
미리 조언 해 주셔서 감사합니다. 그럼 당신이 할 수있는
select t.*
from (<subquery1>
union
<subquery2>
) t
:
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
이 질문과 향후 질문 : ** 문제를 표시하려면 ** 절대 **로 제한하십시오 ** ** 절대 최소 **로하십시오. ** 우리에게 엄청난 양의 코드를 던지면 안됩니다. 여기에있는 모든 T-SQL을 따라갈 것입니다 ..... 이것은 단지 분석하기가 너무 복잡합니다 **. 데이터베이스를 사용할 수 없어도 ... –