SQL Server 2005显示唯一值并且不显示任何重复的内容

时间:2014-03-05 17:50:33

标签: sql sql-server sql-server-2005

On 2005 SQL Server Express我试图让sql语句在显示唯一值的地方工作,其中值序列号仅在表中输入ONCE。如果用户输入两次序列号,我希望它只是忽略两个记录但是我不知道如何完成它。我尝试了这一点,但它仍会显示出记录。

SELECT     DISTINCT SerialNumber, ModelNumber, Date, CustomerName
FROM         PreQcFormTable
WHERE     (Date BETWEEN '2/24/2014' AND '3/5/2014') AND (ProductOrigin = 'P')  AND (FailCodes = '')

没有考虑SerialNumber可能已经输入两次,或者SerialNumber是多于一个记录。我还需要添加其他东西才能使它忽略None unique SerialNumber吗?

编辑1 当我使用这个sql语句时,我会得到这条记录

  "5554432218   7200A-70N       2014-03-04 00:00:00.000 CPE" 
  "555555   9200A-7E1100    2014-03-05 00:00:00.000 ACP"
  "89701234555  9200B-7E1100    2014-02-25 00:00:00.000 Gleen"

问题是当我输入这个类似的sql语句时,已经在一周内输入了55555序列号。

SELECT    *
FROM       PreQcFormTable
WHERE     (Date BETWEEN '2/24/2014' AND '3/5/2014') AND (ProductOrigin = 'P') AND (FailCodes != '')

结果:

555555  9200A-7E1100    2014-03-05 00:00:00.000 ACP 2M is: 89 
1323465 7200A-70N            2014-02-25 00:00:00.000             ACP    1M    

知道我希望从第一个记录中删除记录会导致我得到这个结果:

      "5554432218   7200A-70N       2014-03-04 00:00:00.000 CPE" 
  "89701234555  9200B-7E1100    2014-02-25 00:00:00.000 Gleen"

1 个答案:

答案 0 :(得分:2)

我会使用count(*)作为窗口函数来获取给定序列号的记录数。然后,只需选择cnt = 1

所在的行
SELECT SerialNumber, ModelNumber, Date, CustomerName
FROM (SELECT pft.*,
             count(*) over (partition by SerialNumber) as cnt
      FROM PreQcFormTable pft
      WHERE Date BETWEEN '2014-02-14' AND '2014-03-05' AND
            ProductOrigin = 'P'
     ) t
WHERE cnt = 1 AND
      FailCodes = '';