Sql 在联接上添加行后获取重复项
在添加了几个连接之后,当我进行连接时,我会得到重复的数据和其他数据。你知道我可能做错了什么吗 没有重复的旧代码:Sql 在联接上添加行后获取重复项,sql,duplicates,Sql,Duplicates,在添加了几个连接之后,当我进行连接时,我会得到重复的数据和其他数据。你知道我可能做错了什么吗 没有重复的旧代码: SELECT dbo.dateonly(ctl.datetrans) AS DateRecorded, L.Clientkey AS ClientNum, L.Fullname, cs.Datesvc, cs.chargekey, ctl.CheckNum, ctl.ReceivedFrom, ctl.De
SELECT
dbo.dateonly(ctl.datetrans) AS DateRecorded,
L.Clientkey AS ClientNum,
L.Fullname,
cs.Datesvc,
cs.chargekey,
ctl.CheckNum,
ctl.ReceivedFrom,
ctl.Delta,
CONVERT(varchar(10), dept.deptkey) AS Deptkey,
dept.DeptName,
dept.PgmName,
CONVERT(varchar(10), dept.pgmKey) AS PGMKey,
ctl.Transtypelu
FROM
bil_Chargetranslog ctl
LEFT JOIN dbo.BIL_ChargeSlips cs
ON cs.Chargekey = ctl.Chargekey
LEFT JOIN dbo.BLV_Clients L
ON cs.ClientKey = L.ClientKey
LEFT JOIN Blv_DeptPgm dept
ON dept.Pgmkey = cs.PgmLU
WHERE
(
ctl.Transtypelu = 4
AND (
(
ctl.descr <> 'Client Payment'
AND ctl.descr <> 'Copayment'
) OR ctl.descr IS NULL
)
)
UNION ALL
/* note below that the checknum is converted to a varchar for the query*/
SELECT
dbo.dateonly(daterecorded) AS daterecorded,
L.Clientkey AS ClientNum,
L.Fullname,
DatePayment,
NULL AS chargekey,
CONVERT(varchar(15), checknum) AS checknum,
NULL AS receivedfrom,
(- 1 * Amount) AS delta,
CONVERT(varchar(10), dept.deptkey) AS Deptkey,
dept.DeptName,
dept.PgmName,
CONVERT(varchar(10), dept.pgmKey) AS PGMKey,
4 AS transtypelu
FROM
bil_clientdeposit
LEFT JOIN dbo.BLV_Clients L
ON bil_clientdeposit.ClientKey = L.ClientKey
LEFT JOIN Blv_DeptPgm dept
ON dept.Pgmkey = Bil_ClientDeposit.PgmKey
“union”和“union all”的区别在于后者返回所有记录,而前者返回不同的记录。如果不需要重复的记录,请使用前者。如果添加了两个额外的联接,并且突然看到重复的行,则在一个或两个联接表中可能存在一对多关系,而在其他联接表中不存在。尝试执行
选择*
并查看哪些列显示为重复记录
您可以通过在SELECT
语句前面添加以下内容来删除重复项:
SELECT DISTINCT
dbo.dateonly(ctl.datetrans) AS DateRecorded,
L.Clientkey AS ClientNum,
L.Fullname,
....
好主意,我先看看select得到的是什么。没什么,我认为有些行有时有额外的数据,而有些行没有。我将仅使用SELECT语句来检查这一点。如果是这种情况,则它们不是重复的行。
left join BIL_ARTRANSLOG AR
ON ctl.chargekey = ar.chargekey
left join BIL_PAYORPLANS PR
ON PR.PAYORPLANKEY = AR.PAYORPLANKEY
SELECT DISTINCT
dbo.dateonly(ctl.datetrans) AS DateRecorded,
L.Clientkey AS ClientNum,
L.Fullname,
....