0

我有 2 张桌子Customermeter.

Acustomer可能meternbrmeter表中有多个。Customer有一个customernbr专栏。

我想退回拥有不止一个的客户meternbr。请看下表。我也想只返回客户 a 和 c meternbr

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

2 回答 2

2

如果那是一个字符串(我认为这不是一个好主意),并且如果您的 DBMS 支持LEFT/SUBSTRING and INSTR,您可以LEFT or a SUBSTRING 结合 aINSTR来查找第一个'-'索引在哪里,并获取拥有多个索引的客户通过使用 GROUP BY 和 HAVING COUNT(*) > 1 发生。

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;

如果这些是计量表 (customerNbr) 和 (meterNbr) 中的两列,您可以简单地执行以下操作:

SELECT customerNbr
FROM meter
GROUP BY 1
HAVING COUNT(*) > 1;
于 2013-11-06T21:45:19.580 回答
0

使用GROUP BYHAVING从句COUNT(*) > 1

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

在下面粘贴代码和结果:

CREATE TABLES(注意:没有放置 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 
  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
于 2013-11-06T21:38:54.393 回答