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"
答案 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 = '';