我必须检查任何书籍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
4531
与BookId
42568
和BookCode
B1162
重复。
答案 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