我有一项任务是选择具有> = 3个不同姓氏的公共地址:123为我的例子。
我在几个步骤中对此进行了编码,只想了解其他解决方案的内容,我认为可以单步执行,我在SQL Server 2016上。
这个Min / Max适用于2个以上不同的名字,但有3个以上我需要做更多的逻辑我认为
;WITH c AS
(
SELECT 'Dow' LName, 'John' Fname, '123 Main' addr
UNION
SELECT 'Alexander' LName, 'Mike' Fname, '123 Main' addr
UNION
SELECT 'Sam' LName, 'Kent' Fname, '123 Main' addr
UNION
SELECT 'Marth' LName, 'Rose' Fname,'123 Main' addr
UNION
SELECT 'Xavier' LName, 'Rob' Fname, '9000 Metaxa St' addr
UNION
SELECT 'Xavier' LName, 'Mary' Fname,'9000 Metaxa St' addr
UNION
SELECT '__Xavier' LName, 'Lucricia' Fname,'9000 Metaxa St' addr
UNION
SELECT 'Xclude' LName, 'John' Fname, 'Kirov 2 St' addr
)
, -- SELECT * FROM c
c2 AS
(
SELECT MIN(lname) nameMin, MAX(lname) nameMax, addr, COUNT(*) cc
FROM c
GROUP BY addr
)
SELECT *
FROM c2
WHERE nameMin <> nameMax AND cc >=3
答案 0 :(得分:2)
您可以使用COUNT(DISTINCT)
一步一步获取不同的姓氏,并为组条件HAVING()
执行此操作:
WITH c AS (
SELECT 'Dow' LName, 'John' Fname, '123 Main' addr UNION
SELECT 'Alexander' LName, 'Mike' Fname, '123 Main' addr UNION
SELECT 'Sam' LName, 'Kent' Fname, '123 Main' addr UNION
SELECT 'Marth' LName, 'Rose' Fname,'123 Main' addr UNION
SELECT 'Xavier' LName, 'Rob' Fname, '9000 Metaxa St' addr UNION
SELECT 'Xavier' LName, 'Mary' Fname,'9000 Metaxa St' addr UNION
SELECT '__Xavier' LName, 'Lucricia' Fname,'9000 Metaxa St' addr UNION
SELECT 'Xclude' LName, 'John' Fname, 'Kirov 2 St' addr
)
SELECT addr, COUNT(DISTINCT LName) as LNameCount
FROM c
GROUP BY addr
HAVING COUNT(distinct LName)>=3