我有一个包含大量列的表格,我正在尝试运行查询,但我很难想出来。这就是我的表格。
clientID Code
-----------------------
17 DAC7
19 DAC8
20 TIM19
21 DAC7
89 TIM19
所以在这里,我有两列(还有更多,但它们实际上是无关紧要的)。所以我面临的问题是每个客户端应该有不同的代码,但可能有两个不同的客户端具有相同的代码,这正是我尝试的找到。如果你看上面客户端17和21有DAC7,客户端20和89有TIM19。
我如何查询此表只向我显示有多个CODE实例的数据,例如......
SELECT ClientID, Code
FROM TblA
WHERE Count (code) > 1
ORDER by Code
最终结果我希望......
17 DAC7
21 DAC7
89 TIM19
20 TIM19
答案 0 :(得分:4)
只需使用以下内容:
SELECT ClientID, Code, COUNT(*) AS CNT
FROM Table
GROUP BY ClientID, Code
Having
COUNT(*) > 1
答案 1 :(得分:3)
您可以使用以下查询获取重复的Code
值:
SELECT Code
FROM TblA
GROUP BY Code
HAVING COUNT(*) > 1
将此查询用作派生表,您可以JOIN
返回原始表格以获取ClientID
字段:
SELECT t1.ClientID, t1.Code
FROM TblA AS t1
JOIN (
SELECT Code
FROM TblA
GROUP BY Code
HAVING COUNT(*) > 1
) AS t2 ON t1.Code = t2.Code
答案 2 :(得分:3)
您可以使用count()Over()
;With cte_1
as
( SELECT ClientID,Code,COUNT(1)OVER(PARTITION BY code order by code) cnt
FROM Yourtable)
SELECT *
FROM cte_1
WHERE cn1>1
答案 3 :(得分:2)
您有正确的想法,但必须使用GROUP BY... HAVING
来获取重复的代码:
SELECT Code
FROM TblA
GROUP BY Code
HAVING COUNT(*) > 1
然后在子查询或派生表中使用它来获取ID
。
子查询选项:
SELECT ClientID, Code
FROM TblA
WHERE Code IN (SELECT Code
FROM TblA
GROUP BY Code
HAVING COUNT(*) > 1)
ORDER BY Code
答案 4 :(得分:1)
您也可以使用IN
声明执行此操作:
SELECT clientID, code
FROM T
WHERE code IN
(SELECT code
FROM T
GROUP BY code
HAVING COUNT(*) > 1)
ORDER BY code