SQL:在库数据库中查找重复条目

时间:2017-10-16 13:47:43

标签: sql sql-server sql-server-2008

我必须检查任何书籍ID和/或书籍代码是否与唯一的StudentVisitId重复,并且它应该返回单行。如果找到重复,那么它应该返回0,否则为1。

数据:

BookID  StudentVisitId  BookCode    ListOrder
42568   4531            B1162       3
42568   4531            B1162       2
64532   4531            B1178       2
64532   4598            B1178       3
76543   4622            B1178       2
64532   4622            B1178       1

预期输出:

StudentVisitId  DuplicateEntry
4531            0
4598            1
4622            1

0表示StudentVisitId 4531BookId 42568BookCode B1162重复。

3 个答案:

答案 0 :(得分:1)

这可以通过多种方式完成。下面的SQL显示了如何使用CTE实现此目的

;
WITH CTE(StudentVisitId, DuplicateEntry)
AS
(
SELECT StudentVisitId,
       CASE 
       WHEN ROW_NUMBER() OVER (PARTITION BY BookId, StudentVisitId, BookCode ORDER BY StudentVisitId) > 1 
       THEN 0 ELSE 1 
       END 
FROM LibraryData
)SELECT StudentVisitId, MIN(DuplicateEntry) FROM cte 
GROUP BY StudentVisitId

答案 1 :(得分:1)

如果我理解正确:

categories

我不确定select studentid, (case when min(bookcode) = max(bookcode) then 1 else 0 end) as isDuplicate from t group by studentid; 在这种情况下的真正意义。这似乎是专栏的奇怪名称。更好的名称是isDuplicate

答案 2 :(得分:1)

你可以试试这个

SELECT StudentVisitId, MIN(DuplicateEntry) DuplicateEntry
FROM (
    SELECT BookID,  StudentVisitId,  BookCode, DuplicateEntry = (CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END)
    FROM @DATA
    GROUP BY BookID,  StudentVisitId,  BookCode 
) AS A
GROUP BY StudentVisitId