我有2个表Customer
和meter
。
customer
可能在meternbr
表中有多个meter
。 Customer
有一个customernbr
列。
我想要退回只有meternbr
个以上的客户。看下表。我想仅返回带有meternbr
的客户a和c。
Customer Meter
-------- -----
a a-100
b a-101
c b-103
d c-104
c-105
答案 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
使用HAVING
和COUNT(*) > 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