在列中查找重复出现次数

时间:2013-11-06 21:28:45

标签: sql duplicates return-value

我有2个表Customermeter

customer可能在meternbr表中有多个meterCustomer有一个customernbr列。

我想要退回只有meternbr个以上的客户。看下表。我想仅返回带有meternbr的客户a和c。

Customer  Meter
--------  -----
a          a-100
b          a-101
c          b-103 
d          c-104
           c-105

2 个答案:

答案 0 :(得分:2)

如果这是一个单独的字符串(我认为这不是一个好主意),如果您的DBMS支持LEFT/SUBSTRING and INSTR,您可以LEFT or a SUBSTRING结合{{1}找到第一个INSTR索引的位置,并通过使用GROUP BY和HAVING COUNT(*)>获取具有多个匹配项的客户。 1。

'-'

如果这些是仪表(customerNbr)和(meterNbr)中的两列,您可以这样做:

SELECT LEFT(meterColumn,INSTR(meterColumn,'-')-1)
FROM meter
WHERE LEFT(meterColumn,INSTR(meterColumn,'-')-1) IN (
    SELECT LEFT(meterColumn,INSTR(meterColumn,'-')-1)
    FROM meter
    GROUP BY LEFT(meterColumn,INSTR(meterColumn,'-')-1)
    HAVING COUNT(*) > 1
    )
GROUP BY 1;

答案 1 :(得分:0)

GROUP BY使用HAVINGCOUNT(*) > 1条款。

这是一个正常工作的示例:http://sqlfiddle.com/#!3/d1b91/17

下面粘贴代码和结果:

创建表格(注意:没有为演示目的放置FK Constaint)

CREATE TABLE Customer
(
  customernbr NVARCHAR(20) NOT NULL
)


CREATE TABLE Meter
(
  meternbr NVARCHAR(20) NOT NULL,
  customernbr NVARCHAR(20) NOT NULL
)

插入数据。(如果您想查看数据,请取消注释最后2个SELECT语句)

INSERT INTO Customer VALUES
('a'),
('b'),
('c'),
('d');

INSERT INTO Meter VALUES
('a-100','a'),
('a-101','a'),
('b-103','b'),
('c-104','c'),
('c-105','c'),
('d-106','d');

--SELECT * FROM Customer;

--SELECT * FROM Meter;

运行SELECT STATEMENT

SELECT 
  customernbr AS 'Customer',
  meternbr AS 'Meter'
FROM Meter WHERE customernbr IN
(
  SELECT customernbr
  FROM Meter
  GROUP BY customernbr 
  HAVING COUNT(*) > 1
)

查看结果:)

CUSTOMER    METER
a           a-100
a           a-101
c           c-104
c           c-105