我需要您的查询帮助。我有CustomerID及其家庭详细信息CustomerID对于家庭成员和其他家庭成员来说是相同的。并且该表包含Person ID,FirstName,LastName和MiddleName。
我想获得中间名相同的所有客户和家庭成员详细信息,当一些客户的中间名更新时,我们遇到了一个不幸。
示例数据:
create table #testcust (CustID INT, Pid INT, FName VARCHAR(3), LName VARCHAR(3), MName VARCHAR(1))
insert into #testcust
select 11111, 001, 'ABC', 'CDE', 'X'
union all
select 11111, 002, 'CDE', 'CDE', 'X'
union all
select 11111,003, 'XVC', 'CDE', 'X'
union all
select 11111, 004, 'YUS', 'CDE', 'X'
union all
select 11111, 005, 'AHS', 'CDE', 'X'
union all
select 11011, 001, 'OPO', 'ABS', 'X'
union all
select 11011, 002, 'LKJ', 'ABS', 'Y'
union all
select 11011, 003, 'FGS', 'ABS', 'X'
union all
select 21011, 001, 'OLO', 'ABX', 'Y'
union all
select 21011, 002, 'LOJ', 'ABX', 'Y'
union all
select 11031, 001, 'OPO', 'OBS', 'X'
union all
select 11031, 002, 'LKJ', 'OBS', 'Y'
union all
select 11031, 003, 'FGS', 'OBS', 'X'
union all
select 11031, 004, 'OPO', 'OBS', 'X'
union all
select 11031, 005, 'LKJ', 'OBS', 'Y'
union all
select 11031, 006, 'FGS', 'OBS', 'X'
union all
select 10000, 001, 'CDE', 'CDE', 'X'
union all
select 10000, 002, 'XVC', 'CDE', ''
union all
select 10000, 003, 'YUS', 'CDE', ''
union all
select 10000, 004, 'AHS', 'CDE', 'X'
select * from #testcust
drop table #testcust
我想获得所有客户的详细信息,其中的中间名称是相同的。
答案 0 :(得分:0)
只需GROUP BY CustomerID和COUNT DISTINCT中间名。然后只保留那些名为HAUNT COUNT = 1的名称。
SELECT
CustID
,COUNT(DISTINCT MName) AS DistinctMiddleNames
FROM #testcust
GROUP BY CustID
HAVING COUNT(DISTINCT MName) = 1
ORDER BY CustID;
<强>结果强>
+--------+---------------------+
| CustID | DistinctMiddleNames |
+--------+---------------------+
| 11111 | 1 |
| 21011 | 1 |
+--------+---------------------+
答案 1 :(得分:0)
您可以计算每个客户ID的唯一中间名数:
SELECT CustID ,
COUNT(DISTINCT Pid) ,
COUNT(DISTINCT MName)
FROM #testcust
GROUP BY CustID
HAVING COUNT(DISTINCT MName) = 1
由于家庭成员可能具有相似的中间名,因此您可以通过区分大小写来改进查询:
SELECT CustID ,
COUNT(DISTINCT Pid) ,
COUNT(DISTINCT MName COLLATE Latin1_General_CS_AS )
FROM #testcust
GROUP BY CustID
HAVING COUNT(DISTINCT MName COLLATE Latin1_General_CS_AS ) = 1
你知道如果中间名是“X”和“x”,那么你知道他们没有使用相同的“不幸事件”进行更新。