SQL Server 2008 - 选择查询特定项

时间:2016-09-02 17:30:46

标签: sql sql-server-2008 select

我有一个包含大量列的表格,我正在尝试运行查询,但我很难想出来。这就是我的表格。

 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

5 个答案:

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

在这里测试:http://sqlfiddle.com/#!9/fd441a/6