【问题标题】:SQL Server 2008 - Select query specific itemSQL Server 2008 - 选择查询特定项目
【发布时间】:2017-01-10 21:29:29
【问题描述】:

我有一个包含一堆列的表,我正在尝试运行查询,但我很难想出它。这就是我的桌子的样子..

 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

【问题讨论】:

    标签: sql sql-server-2008 select


    【解决方案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

    【讨论】:

      【解决方案2】:

      只需使用以下内容:

      SELECT ClientID, Code, COUNT(*) AS CNT
      FROM Table
      GROUP BY ClientID, Code
      Having
      COUNT(*) > 1
      

      【讨论】:

        【解决方案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
        

        【讨论】:

          【解决方案4】:

          您的想法是对的,但您必须使用GROUP BY... HAVING 来获取重复代码:

          SELECT   Code
          FROM     TblA
          GROUP BY Code
          HAVING   COUNT(*) > 1
          

          然后在子查询或派生表中使用它来获取IDs。

          子查询选项:

          SELECT   ClientID, Code
          FROM     TblA
          WHERE    Code IN (SELECT   Code
                            FROM     TblA
                            GROUP BY Code
                            HAVING   COUNT(*) > 1)
          ORDER BY Code
          

          【讨论】:

            【解决方案5】:

            您可以使用以下查询获得重复的 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
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-28
              • 2013-06-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多