이보기는 정상적으로 작동합니다. 그 2008 R2UNION 회수 복제를 사용하여 선택
CREATE view vwQry_LicencePayments
as
select
P.*,
LT.LicenceTypeDesc, FT.FeeTypeDesc, FT.ThroughputText, FT.Prorata as IsProrata, PT.PaymentStatusDesc, PT.IsPaid,
E.EntityType as HolderEntityType, E.EntityTypeDesc as HolderEntityTypeDesc, E.PersonTitle, E.PersonFirstname, E.PersonSurname,
E.OrganisationName, E.FullName as HolderFullName,
E.MailAddress as HolderMailAddress, E.Suburb as HolderSuburb, E.State as HolderState, E.Postcode as HolderPostcode,
E.Mobile as HolderMobile, E.Email, E.PFN as HolderPFN
from
rptPayment P
inner join vwQry_xhsEntity_Base E on P.HolderHistoryID = E.HistoryID
inner join LicenceType LT on P.LicenceTypeID=LT.LicenceTypeID
inner join LicenceFeeType FT on P.FeeTypeID=FT.FeeTypeID
inner join PaymentStatusType PT on P.PaymentStatusID = PT.PaymentStatusID
union ALL
select
P.*,
LT.LicenceTypeDesc, FT.FeeTypeDesc, FT.ThroughputText, FT.Prorata as IsProrata, PT.PaymentStatusDesc, PT.IsPaid,
E.EntityType as HolderEntityType, E.EntityTypeDesc as HolderEntityTypeDesc, E.PersonTitle, E.PersonFirstname, E.PersonSurname,
E.OrganisationName, E.FullName as HolderFullName,
E.MailAddress as HolderMailAddress, E.Suburb as HolderSuburb, E.State as HolderState, E.Postcode as HolderPostcode,
E.Mobile as HolderMobile, E.Email, E.PFN as HolderPFN
from
(select * from rptPayment where HolderHistoryID is null) P
inner join vwQry_Entity E on P.HolderID = E.EntityID
inner join LicenceType LT on P.LicenceTypeID=LT.LicenceTypeID
inner join LicenceFeeType FT on P.FeeTypeID=FT.FeeTypeID
inner join PaymentStatusType PT on P.PaymentStatusID = PT.PaymentStatusID
요구 사항은 지불 날짜 (LP.dateTimeStamp)를 포함하는 SQLServer에 얘기 보고서 건물 마법사에서 사용 내놓았다. 따라서 추가 필드 (LP.dateTimeStamp)와 두 개의 조인 (licenceFeePaymenttble 및 licencePaymenttble)을 추가하면 필연적으로 결과 집합에 중복이 발생합니다. 예를 들어 면허가 세 번의 별도 지불로 지불 되었다면 licencefeePayment 테이블에 세 개의 레코드가있을 것이라고 가정합니다. 그들은 내가 만든 변경 :
CREATE view vwQry_LicencePayments
as
select
P.*,
LT.LicenceTypeDesc, FT.FeeTypeDesc, FT.ThroughputText, FT.Prorata as IsProrata, PT.PaymentStatusDesc, PT.IsPaid,
E.EntityType as HolderEntityType, E.EntityTypeDesc as HolderEntityTypeDesc, E.PersonTitle, E.PersonFirstname, E.PersonSurname,
E.OrganisationName, E.FullName as HolderFullName,
E.MailAddress as HolderMailAddress, E.Suburb as HolderSuburb, E.State as HolderState, E.Postcode as HolderPostcode,
E.Mobile as HolderMobile, E.Email, E.PFN as HolderPFN, LP.DatetimeStamp AS DatetimeStamp
from
rptPayment P
inner join vwQry_xhsEntity_Base E on P.HolderHistoryID = E.HistoryID
inner join LicenceType LT on P.LicenceTypeID=LT.LicenceTypeID
inner join LicenceFeeType FT on P.FeeTypeID=FT.FeeTypeID
inner join PaymentStatusType PT on P.PaymentStatusID = PT.PaymentStatusID
inner join licenceFeePayment LFP on P.licenceID = LFP.licenceID
inner join licencePayment LP on LFP.paymentID = LP.paymentID
union ALL
select
P.*,
LT.LicenceTypeDesc, FT.FeeTypeDesc, FT.ThroughputText, FT.Prorata as IsProrata, PT.PaymentStatusDesc, PT.IsPaid,
E.EntityType as HolderEntityType, E.EntityTypeDesc as HolderEntityTypeDesc, E.PersonTitle, E.PersonFirstname, E.PersonSurname,
E.OrganisationName, E.FullName as HolderFullName,
E.MailAddress as HolderMailAddress, E.Suburb as HolderSuburb, E.State as HolderState, E.Postcode as HolderPostcode,
E.Mobile as HolderMobile, E.Email, E.PFN as HolderPFN, LP.DatetimeStamp AS DatetimeStamp
from
(select * from rptPayment where HolderHistoryID is null) P
inner join vwQry_Entity E on P.HolderID = E.EntityID
inner join LicenceType LT on P.LicenceTypeID=LT.LicenceTypeID
inner join LicenceFeeType FT on P.FeeTypeID=FT.FeeTypeID
inner join PaymentStatusType PT on P.PaymentStatusID = PT.PaymentStatusID
inner join licenceFeePayment LFP on P.licenceID = LFP.licenceID
inner join licencePayment LP on LFP.paymentID = LP.paymentID
도움을 주시면 감사하겠습니다. 어떻게이 두 테이블을 결합하고 중복을 피할 수 있습니까?
@ 등록 사용자는 내가 그렇게 했음에도 불구하고 내 UNION에서 ALL을 모두 제거하는 것만 큼 간단하지 않다고 지적했습니다.
@ 등록 사용자는 유용한 답장을 보내 주셔서 감사합니다. 귀하의 도움을 바탕으로 내 쿼리를 변경했습니다. 이제 또 다른 작은 문제가 있습니다. 'paymentType'테이블의 'PaymentTypeDesc'라는 필드를 추가했습니다. 이 테이블이 'LicencePayment'를 통해 조인 할 때 하위 쿼리에 배치해야했습니다. 나는 지금도 믿을 수 있기 때문에 여전히 복제본을 얻고 있습니다. 복수 지불이 면허증에 들어올 수있을뿐만 아니라 여러 다른 출처의 EF EFTPOS, 현금 등에서 올 수 있습니다 ....
지불 거래뿐만 아니라 여러 지불 유형? 여기 내 변경된 작업 쿼리는 당신의 도움을 사용하여 이후 : 켄이 지적 하듯이
이CREATE view vwQry_LicencePaymentsNew
as
select
P.*,
LT.LicenceTypeDesc, FT.FeeTypeDesc, FT.ThroughputText, FT.Prorata as IsProrata, PT.PaymentStatusDesc, PT.IsPaid,
E.EntityType as HolderEntityType, E.EntityTypeDesc as HolderEntityTypeDesc, E.PersonTitle, E.PersonFirstname, E.PersonSurname,
E.OrganisationName, E.FullName as HolderFullName,
E.MailAddress as HolderMailAddress, E.Suburb as HolderSuburb, E.State as HolderState, E.Postcode as HolderPostcode,
E.Mobile as HolderMobile, E.Email, E.PFN as HolderPFN
, lic.VehicleRegNo as VehicleRegNo
, payment.PaymentTypeDesc as PaymentTypeDesc
, S.StatusTypeDesc as StatusTypeDesc
, Payment.LastPaymentDate as DatetimeStamp
-- , Payment.FirstPaymentDate
from
rptPayment P
inner join vwQry_xhsEntity_Base E on P.HolderHistoryID = E.HistoryID
inner join LicenceType LT on P.LicenceTypeID=LT.LicenceTypeID
inner join LicenceFeeType FT on P.FeeTypeID=FT.FeeTypeID
inner join PaymentStatusType PT on P.PaymentStatusID = PT.PaymentStatusID
inner join licence Lic on P.licenceID = lic.licenceID
inner join vwLicCurrentStatus S on P.LicenceID=S.LicenceID
inner join
(SELECT LFP.licenceID
, FirstPaymentDate = MIN(LP.DatetimeStamp)
, LastPaymentDate = MAX(LP.DatetimeStamp)
, PType.PaymentTypeDesc
FROM licenceFeePayment LFP
INNER JOIN licencePayment LP
on LFP.paymentID = LP.paymentID
INNER JOIN paymentType PType
on LP.paymentTypeID = PType.paymentTypeID
GROUP BY lfp.licenceID, PType.PaymentTypeDesc) Payment
ON P.licenceID = Payment.licenceID
union
select
P.*,
LT.LicenceTypeDesc, FT.FeeTypeDesc, FT.ThroughputText, FT.Prorata as IsProrata, PT.PaymentStatusDesc, PT.IsPaid,
E.EntityType as HolderEntityType, E.EntityTypeDesc as HolderEntityTypeDesc, E.PersonTitle, E.PersonFirstname, E.PersonSurname,
E.OrganisationName, E.FullName as HolderFullName,
E.MailAddress as HolderMailAddress, E.Suburb as HolderSuburb, E.State as HolderState, E.Postcode as HolderPostcode,
E.Mobile as HolderMobile, E.Email, E.PFN as HolderPFN
, lic.VehicleRegNo as VehicleRegNo
, payment.PaymentTypeDesc as PaymentTypeDesc
, S.StatusTypeDesc as StatusTypeDesc
, Payment.LastPaymentDate as DatetimeStamp
-- , Payment.FirstPaymentDate
from rptPayment P
inner join vwQry_xhsEntity_Base E on P.HolderHistoryID = E.HistoryID
inner join LicenceType LT on P.LicenceTypeID=LT.LicenceTypeID
inner join LicenceFeeType FT on P.FeeTypeID=FT.FeeTypeID
inner join PaymentStatusType PT on P.PaymentStatusID = PT.PaymentStatusID
inner join licence Lic on P.licenceID = lic.licenceID
inner join vwLicCurrentStatus S on P.LicenceID=S.LicenceID
inner join
(SELECT LFP.licenceID
, FirstPaymentDate = MIN(LP.DatetimeStamp)
, LastPaymentDate = MAX(LP.DatetimeStamp)
, PType.PaymentTypeDesc
FROM licenceFeePayment LFP
INNER JOIN licencePayment LP
on LFP.paymentID = LP.paymentID
INNER JOIN paymentType PType
on LP.paymentTypeID = PType.paymentTypeID
GROUP BY lfp.licenceID, PType.PaymentTypeDesc) Payment
ON P.licenceID = Payment.licenceID
'UNION' 문에서'ALL '을 제거하십시오. –
@Ken 시간 내 주셔서 감사합니다. 나는 아직도 도움이 될 문제가있는 게시물을 추가했다. 등록 된 사용자가 ALL을 제거하는 것만 큼 간단하지 않다고 지적한만큼 – Mat41
자세한 정보를 제공해야합니다 (일부 샘플 데이터와 해당 데이터에서 원하는 출력과 같음). 그것 없이는, 우리는 단지 문제가 무엇인지 추측 할 수 있으며, 그것은 StackOverflow가 작동하는 방식이 아닙니다. –