Sql server SQL Server-如何删除重复的第二列

Sql server SQL Server-如何删除重复的第二列,sql-server,Sql Server,我有一个类似于下面的查询,希望删除第二列/第三列中的重复行…需要一些示例,在这些示例中,我可以使用以下方法(top 1、max、min等)或其他最佳方法,而无需使用派生查询来删除重复值。谢谢JK WITH cteEMPAssistants (executive_personnel_number, assistant_personnel_number, assistant_type, SecType) AS (SELECT DISTINCT CASE

我有一个类似于下面的查询,希望删除第二列/第三列中的重复行…需要一些示例,在这些示例中,我可以使用以下方法(top 1、max、min等)或其他最佳方法,而无需使用派生查询来删除重复值。谢谢JK

WITH cteEMPAssistants (executive_personnel_number, assistant_personnel_number, assistant_type, SecType) AS
  (SELECT DISTINCT CASE
                       WHEN ISNUMERIC(KA.KIT_asgn_emplid) = 1 THEN CAST(CAST(KA.KIT_asgn_emplid AS INT) AS VARCHAR(11))
                       ELSE ''
                   END AS executive_personnel_number ,
                   CAST(CAST(KAP.emplid AS INT) AS VARCHAR(11)) AS assistant_personnel_number ,
                   ISNULL(LATT1.xlatlongname, '') AS assistant_type ,
                   CAST(LATT1.fieldvalue AS VARCHAR(4)) AS SecType ,
                   ISNULL(LATT3.xlatshortname, '') AS assign_role
   FROM dbo.KIT_ASGN_PRNT AS KAP
   LEFT OUTER JOIN dbo.KIT_ASSIGNMENTS AS KA ON KA.emplid = KAP.emplid
   AND KA.effdt = KAP.effdt
   LEFT OUTER JOIN dbo.KIT_EMPLOYEES AS EXECT ON EXECT.EMPLID = KA.KIT_ASGN_EMPLID
   LEFT OUTER JOIN dbo.KIT_EMPLOYEES AS ASST ON ASST.EMPLID = KAP.EMPLID
   LEFT OUTER JOIN dbo.XLATITEM AS LATT1 ON LATT1.fieldname = 'KIT_ASGN_TYPE'
   AND LATT1.fieldvalue = KAP.KIT_asgn_type
   LEFT OUTER JOIN dbo.XLATITEM AS LATT3 ON LATT3.fieldname = 'KIT_ASGN_ROLE'
   AND LATT3.fieldvalue = KA.KIT_asgn_role
   AND LATT3.xlatshortname = 'Primary'
   WHERE KAP.effdt =
       (SELECT MAX(effdt)
        FROM dbo.KIT_ASGN_PRNT
        WHERE emplid = KAP.emplid
          AND effdt <= GETDATE() ) --Return data only when employee and assistant  active; null is for temps

     AND (EXECT.EMP_STATUS = 'A'
          OR EXECT.EMP_STATUS IS NULL )
     AND ASST.EMP_STATUS = 'A' --Return all floating secretaries

     AND (KAP.KIT_asgn_type = 'F' --Return all assigned secretaries, who are assigned to a person and not a task

          OR (KAP.KIT_asgn_type IN ('A',
                                    'AF')
              AND KA.KIT_asgn_person = 'Y' ) ) )
SELECT CAST(EMP.KIT_EMPLID AS VARCHAR(15)) AS employeeNumber ,
       KAP.emplid AS Assistant ,
       SECRES.SecType AS SecType
FROM dbo.KIT_EMPLOYEES AS EMP
LEFT OUTER JOIN cteEMPAssistants AS SECRES ON EMP.KIT_EMPLID = SECRES.assistant_personnel_number
WHERE (EMP.EMP_STATUS = 'A')
  AND (EMP.PER_ORG IN ('EMP',
                       'CWR'))
  AND (ISNULL(EMP.KIT_NETWORK_ID, '') <> '')

您应该能够将其附加到查询的末尾:

GROUP BY EMP.KIT_EMPLID, KAP.emplid, SECRES.SecType

我正在努力理解你的问题,但我假设你想从结果集中删除第2、第3和第4行,那么你为什么不选择DISTINCT?谢谢,我将尝试下面提到的group by。如果group by起作用,那么DISTINCT,just fyialan就不起作用了。一点背景…cte以前是一个视图,名为assistant_view。assistant_视图由另一个视图sec_视图调用,该视图根据类型选择2个列:assistant_employee_编号和sectype:a=sctve,f=FLOTER,af=active FLOTER;sec_视图中有一个group by,位于assistant_employee_num、sectype上;视图sec_视图已用于在assistant_employee_num=main_employee_num上的主查询链接中的左外部联接中。您对如何在我先前提交的查询中获得相同的结果(调用使用分组依据的视图…)有何建议。谢谢我不确定我是否明白,你能重新措辞吗?(即,我无法应用GROUP BY,因为它给了我一个语法错误)
GROUP BY EMP.KIT_EMPLID, KAP.emplid, SECRES.SecType