2017-10-16 79 views
0

我必须检查任何书籍ID和/或书本代码是否为唯一StudentVisitId的副本,并且它应该返回一行。如果发现重复的,那么它应该返回0,否则,1SQL:在库数据库中查找重复条目

数据:

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表示StudentVisitId4531BookId重复42568BookCodeB1162

回答

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 
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

select studentid, 
     (case when min(bookcode) = max(bookcode) then 1 else 0 end) as isDuplicate 
from t 
group by studentid; 

我不完全相信isDuplicate实际上意味着在这种情况下。这似乎是该专栏的一个奇怪的名字。更好的名字是hasOnlyOneBook

+0

case语句给人相反的答案。但是当我将值1和0互换时,它运行良好。 – Madhukar