我不知道如何在 SQL 2008 中得到这个
对于同一个邮政编码,有多个客户端并且具有 RelationNo 我正在尝试查找丢失的关系号码 当同一邮政编码有两个或多个客户号码且这些客户的任何一个电话号码相同时 那么相同的交易号将在缺失、NULL 或空白的地方更新
如果电话号码不存在,则不执行任何操作。
有人可以建议如何在sql中执行
表:
DECLARE @MASTER TABLE
(
POSTAL VARCHAR (50),
CLIENT VARCHAR (50),
phone1 INT,
phone2 INT,
RelationNo VARCHAR (50)
)
INSERT @MASTER
SELECT 'M169HE', 'E5017766',016187,88888,'E100' UNION ALL
SELECT 'M169HE', 'M0111136', '', 016187, '' UNION ALL
SELECT 'IV11UF', 'E3009949', 50505, '', 'F200' UNION ALL
SELECT 'KA48HH', 'E3087713', 01290, '', '' UNION ALL
SELECT 'KA48HH', 'E3017126', 55665, 01290, 'G999' UNION ALL
SELECT 'KA48HH', 'E5005326', '', 55665, '' UNION ALL
SELECT 'YO72LZ', 'C5640095', '', '', 'T8888' UNION ALL
SELECT 'YO72LZ', 'C5640096', '', '', ''
输出:
POSTAL| CLIENT |phone1 | phone2| RelationNo
M169HE| E5017766|16187 |88888 |E100
M169HE| M0111136| |16187 |E100
IV11UF| E3009949| 50505| |F200
KA48HH| E3087713| 1290 | |G999
KA48HH| E3017126| 55665|1290 |G999
KA48HH| E5005326| |55665 |G999
YO72LZ| C5640095| | T8888 |
YO72LZ| C5640096| | |
谢谢
最佳答案
使用cross apply
里面 common table expression
查找并更新那些缺少 RelationNo
的行的匹配 RelationNo
:
测试设置:http://rextester.com/YARZ79913
;with cte as (
select o.*, x.FoundRelationNo
from @MASTER as o
cross apply (
select top 1 FoundRelationNo = i.RelationNo
from @MASTER as i
where i.Postal = o.Postal
and nullif(i.relationno,'') is not null
and (
nullif(i.phone1,0) in (o.phone1, o.phone2)
or nullif(i.phone2,0) in (o.phone1, o.phone2)
)
) as x
where nullif(o.relationno,'') is null
and (o.phone1 > 0 or o.phone2 > 0)
)
--select * from cte
update cte set RelationNo = FoundRelationNo
select * from @MASTER
结果:
+--------+----------+--------+--------+------------+
| POSTAL | CLIENT | phone1 | phone2 | RelationNo |
+--------+----------+--------+--------+------------+
| M169HE | E5017766 | 16187 | 88888 | E100 |
| M169HE | M0111136 | 0 | 16187 | E100 |
| IV11UF | E3009949 | 50505 | 0 | F200 |
| KA48HH | E3087713 | 1290 | 0 | G999 |
| KA48HH | E3017126 | 55665 | 1290 | G999 |
| KA48HH | E5005326 | 0 | 55665 | G999 |
| YO72LZ | C5640095 | 0 | 0 | T8888 |
| YO72LZ | C5640096 | 0 | 0 | |
+--------+----------+--------+--------+------------+
关于sql - 检查给定组的多列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42161105/