TSQL与Select连接的Select语句不同

时间:2014-05-22 15:52:02

标签: sql tsql

我有一个向我提供正确数据的查询,但如果同一tuitionSubmission的{​​{1}}表中有多条记录,则会显示重复的结果(如预期的那样)。

我正在尝试在empID

上对此查询使用不同的选择器

以下是我的查询:

A.[empID]

表tuitionSubmissions可以包含同一用户的多个记录(相同的empID)但我只想显示其中一个

2 个答案:

答案 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)

comment

  

“我只想展示其中一个”哪一个? - 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列。这可用作“唯一标识符”,以获取tuitionSubmissionsEmpID的最新版本,如下所示:

;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.
*/