【问题标题】:find names HAVING multiple account numbers查找具有多个帐号的名称
【发布时间】:2012-12-26 12:25:19
【问题描述】:
CREATE TABLE one_many
  (name VARCHAR2(20),
  acc_num VARCHAR2(20))

  INSERT ALL 
  INTO one_many VALUES ('abc','a-110')
  INTO one_many VALUES ('def','b-256')
  INTO one_many VALUES ('xyz','v-586')
  INTO one_many VALUES ('uij','o-451')
  INTO one_many VALUES ('pqr','')
  INTO one_many VALUES ('abc','a-120')
  INTO one_many VALUES ('xyz','v-588')
  SELECT * FROM dual;

如何找到一对多的情况,即选择那些名字有多个 acc_num 的??

Desired o/p:
NAME ACC_NUM
abc  a-110  
abc  a-120  
xyz  v-586  
xyz  v-588 

【问题讨论】:

    标签: sql select oracle11g


    【解决方案1】:

    在这种情况下,您需要使用GROUP BYHAVING

    SELECT name, COUNT(*) totalCount
    FROM one_many
    GROUP BY name
    HAVING COUNT(*) > 1
    

    也许这就是你的意思。

    SELECT a.*
    FROM one_many a
         INNER JOIN
          (
            SELECT name, COUNT(*) totalCount
            FROM one_many
            GROUP BY name
            HAVING COUNT(*) > 1
          ) b ON a.name = b.name
    

    【讨论】:

    • 感谢您的快速回复,但我还需要显示多个 acc_name。
    • 多账户名是什么意思?
    【解决方案2】:

    这个查询似乎是为分析函数设计的:

    select name, acc_num
    from (select om.*,
                 count(*) over (partition by name) as NumOnAccount
          from one_many om
         ) t
    where NumOnAccount > 1
    

    【讨论】:

      【解决方案3】:

      你可以这样做

            SELECT * FROM one_many
             WHERE acc_num IN 
                           (SELECT acc_num FROM 
                                           one_many
                                            GROUP BY name ,acc_num 
                                             HAVING COUNT(*)>1
                            );
      

      【讨论】:

        猜你喜欢
        • 2021-06-08
        • 2012-05-07
        • 1970-01-01
        • 2016-09-17
        • 2021-12-06
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        • 2015-06-05
        相关资源
        最近更新 更多