我有一个向我提供正确数据的查询,但如果同一tuitionSubmission
的{{1}}表中有多条记录,则会显示重复的结果(如预期的那样)。
我正在尝试在empID
以下是我的查询:
A.[empID]
表tuitionSubmissions可以包含同一用户的多个记录(相同的empID)但我只想显示其中一个
答案 0 :(得分:0)
您可以通过将以下最后一部分添加到where子句
来获得所需内容WHERE
(B.[EmpID]= COALESCE(@ntid, B.[EmpID]) OR
B.[SupEmpID]= COALESCE(@supervisor, B.[SupEmpID]) OR
C.[SupEmpID]= COALESCE(@manager, C.[SupEmpID]) OR
A.[EmpID]= COALESCE(@empName, C.[EmpID]) OR
B.[GeoLocationDesc]= COALESCE(@theLocation, B.[GeoLocationDesc]) OR
B.[SiloDesc]= COALESCE(@department, B.[SiloDesc]))
AND A.[id] IN
(SELECT MAX(AMax.id)
FROM tuitionSubmissions AS AMax
GROUP BY AMax.empID)
答案 1 :(得分:0)
“我只想展示其中一个”哪一个? - usr
非常重要,因为这是问题的症结所在。如果您有重复项,则需要一些规则来确定两个重复项中的哪一个是正确的。如果重复的行100%相同,那么您错过了主键。 (现在你明白为什么他们如此重要。)
即使您所做的只是添加RowId IDENTITY
列,以便您知道最近添加了哪些重复项,这对于让您的生活更轻松也有很长的路要走。我还建议你去除你的副本,他们没有提供任何信息,只是浪费空间。这是一个问how to remove duplicates应该有用的问题。
但是,如果您想要依赖重复项,可以通过“动态”删除它们来使查询复杂化。
;WITH UniqueSubs AS (
SELECT DISTINCT
[id], [empGradDate], [status], [reimbursementDate],
[firstName], [lastName], [businessTitle], [EmpID]
FROM tuitionSubmissions
)
SELECT A.[empID],
/* ... And the rest of your query as is.
... Just substitute tuitionSubmissions with UniqueSubs.
*/
但是,由于您有一个id
列,或许您已经拥有我之前提到的IDENTITY列。这可用作“唯一标识符”,以获取tuitionSubmissions
每EmpID
的最新版本,如下所示:
;WITH RecentSubs AS (
SELECT EmpID, MAX(id) AS MaxID
FROM tuitionSubmissions
),
UniqueSubs AS (
SELECT ts.*
FROM RecentSubs rs
INNER JOIN tuitionSubmissions ts ON
ts.id = rs.id
/*Prev join condition should suffice, but add if needed*/
--AND ts.EmpID = rs.EmpID
)
SELECT A.[empID],
/* ... And the rest of your query as is.
... Just substitute tuitionSubmissions with UniqueSubs.
*/