按列分组在单个列中具有COUNT(列)> 1

时间:2013-02-15 18:57:52

标签: sql

  1. 列表项
  2. 我正在尝试连接两个表,过滤掉具有唯一值的item_id,并显示任何值 item_id包含相同的值。我正在使用的SQL语句似乎只有一半工作,除了它返回我认为我有这个数字的所有内容,但我猜不是。

    这句话可以解决所有问题。

    --join two tables filtering out and item_id that has a unique value and displaying any 
    --item_id that contains the same value
    
    SELECT inv_bin.bin, inv_bin.quantity, inv_bin.inv_bin_uid, inv_bin.inv_mast_uid,
           inv_mast.inv_mast_uid,inv_mast.item_desc, inv_mast.item_id
    FROM   inv_bin left join inv_mast on inv_bin.inv_mast_uid = inv_mast.inv_mast_uid  
    WHERE inv_mast.item_id in ( SELECT item_id from inv_mast
                                GROUP BY item_id HAVING COUNT (item_id) >= 1 ) 
          AND inv_bin.bin not like 'rec'
          AND inv_bin.bin not like 'DEFBIN'
          AND inv_bin.bin not like 'DEFAULTBIN'
    ORDER BY inv_mast.item_id;
    

    但是,如果我从 '=' 中删除 Group By item_id Having COUNT (item_id) >= 1 ) ,则查询不会返回任何内容。我知道我在item_id列中的数据是相同的:

    bin        item_id
    07C-C15    002-09-121
    Z07-OS     002-09-121
    

    无论如何,有人可以告诉我,我在哪里出错了,在我看来,使用> 1将显示item_id中具有相同值的所有内容。

    谢谢, 布雷特

    bin         quantity   inv_bin_uid   inv_mast_uid   inv_mast_uid   item_id
    07C-C15     0          135           70             70             002-09-121
    Z07-OS      10         130277        70             70             002-09-121
    04C-B21     0          354           289            289            032-36-26
    04C-B04     0          356           291            291            032-38-26
    02A-B01     2          101           48             48             5-40050720L  
    Z29-SKID00  0          117           48             48             5-40050720L  
    

    这是产生所需结果的完成语句。

    /*join two tables filtering out and item_id that has a unique value and displaying any 
    item_id that contains the same value */
    
    SELECT inv_bin.bin, inv_bin.quantity, inv_bin.inv_bin_uid, inv_bin.inv_mast_uid,
    inv_mast.item_desc, inv_mast.item_id
    
    from inv_bin left join inv_mast on inv_bin.inv_mast_uid = inv_mast.inv_mast_uid  
    
    where inv_bin.inv_mast_uid in ( 
    SELECT inv_mast_uid FROM inv_bin  
    WHERE inv_bin.bin NOT IN ('REC','DEFBIN','DEFAULTBIN')
    GROUP BY inv_mast_uid HAVING COUNT(inv_mast_uid)>1 )
    
    and inv_bin.bin not like 'rec'
    and inv_bin.bin not like 'defbin'
    and inv_bin.bin not like 'Defaulbin'
    /*look up filtering out ids based on not like statements*/
    
    ORDER BY inv_bin.inv_mast_uid;
    

    再次感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这不是答案,只是一个问题/评论:

在不知道有关您的数据库架构的任何更多详细信息的情况下,我想知道您是否只是使用了错误的表来进行分组索引?

如果您的“inv_mast”表只包含唯一的“item_id”,那么您永远不会从该特定表中获得高于1的计数。

请尝试依靠“inv_bin”-table上的ID:

SELECT item_id 
FROM inv_bin
GROUP BY item_id HAVING COUNT(item_id) > 1