【发布时间】:2021-08-31 14:50:42
【问题描述】:
我有包含人员姓名、通话日期、from_number 和 to_number 的移动数据。 我需要关联被调用的人的姓名。
也就是说,如果我让 Barbara 从号码 x 呼叫号码 y,那么我想知道 y 或 to_number 属于谁?
下面是一个示例数据集:
SELECT 'Barbara' AS Person, '2020-07-03' AS Date,'022445544' AS From_Number, '022445545' AS To_Number UNION
SELECT 'Barbara' AS Person, '2020-07-03' AS Date,'091234123' AS From_Number, '022445545' AS To_Number UNION
SELECT 'Peter' AS Person, '2020-07-03' AS Date, '03123456' AS From_Number, '08007543' AS To_Number UNION
SELECT 'Peter' AS Person, '2020-07-03' AS Date, '03123456' AS From_Number, '022445555' AS To_Number UNION
SELECT 'Peter' AS Person, '2020-07-04' AS Date, '022445545' AS From_Number, '091234123' AS To_Number UNION
SELECT 'Peter' AS Person, '2020-07-04' AS Date, '022445545' AS From_Number, '022445555' AS To_Number UNION
SELECT 'Peter' AS Person, '2020-07-04' AS Date, '022445545' AS From_Number, '049876543' AS To_Number UNION
SELECT 'David' AS Person, '2020-07-03' AS Date, '049876543' AS From_Number, '022445544' AS To_Number UNION
SELECT 'David' AS Person, '2020-07-04' AS Date, '022445555' AS From_Number, '022445545' AS To_Number
我试过这个:
select *
,case when [From_Number] =[To_Number] then [Person] end as [from person]
from [dbo].[cellphone]
但我认为问题在于我不知道,你会如何表达 SQL 需要在每个人的一个人中查找所有可能的号码,因为例如 Barbara 有许多不同的电话号码。因此,就好像我会寻找一系列数字来确定来电者号码?有时,当然我们没有任何关联,因为我们不知道这个数字。然后需要将其标记为未知数字。
所需的数据集结果应如下所示:
SELECT 'Barbara' AS Person, '2020-07-03' AS Date,'022445544' AS From_Number, '022445545' AS To_Number,'Peter' AS person_called UNION
SELECT 'Barbara' AS Person, '2020-07-03' AS Date,'091234123' AS From_Number, '022445545' AS To_Number, 'Peter' AS person_called UNION
SELECT 'Peter' AS Person, '2020-07-03' AS Date, '03123456' AS From_Number, '08007543' AS To_Number, 'unkn' AS person_called UNION
SELECT 'Peter' AS Person, '2020-07-03' AS Date, '03123456' AS From_Number, '022445555' AS To_Number, 'David' AS person_called UNION
SELECT 'Peter' AS Person, '2020-07-04' AS Date, '022445545' AS From_Number, '091234123' AS To_Number, 'Barbara'AS person_called UNION
SELECT 'Peter' AS Person, '2020-07-04' AS Date, '022445545' AS From_Number, '022445555' AS To_Number, 'David' AS person_called UNION
SELECT 'Peter' AS Person, '2020-07-04' AS Date, '022445545' AS From_Number, '049876543' AS To_Number, 'David' AS person_called UNION
SELECT 'David' AS Person, '2020-07-03' AS Date, '049876543' AS From_Number, '022445544' AS To_Number, 'Barbara'AS person_called UNION
SELECT 'David' AS Person, '2020-07-04' AS Date, '022445555' AS From_Number, '022445545' AS To_Number , 'Peter' AS person_called
I also tried this :
SELECT A.Person, A.Date, A.From_Number, A.To_Number
,CASE WHEN EXISTS (SELECT B.Person, B.Date, B.From_Number, B.To_Number FROM [dbo].[mobile_data] B
WHERE B.From_Number = A.To_Number)
THEN B.Person = A.Person ELSE 'Unknown' END as caller_id
from [dbo].[mobile_data] a
但我收到以下错误消息:The multi-part identifier "B.Person" could not be bound. 基本上我需要:THEN B.Person ELSE
但即使我尝试这个它说 B.Person 不能被绑定。
语法错误在哪里?
【问题讨论】:
-
请根据所提供的样本数据显示您想要的结果。
-
创建一个临时表。
SELECT A.Person, CASE WHEN EXISTS (SELECT * FROM table2 B WHERE B.From_Number = A.To_Number) THEN (SELECT From_Number FROM table2 B WHERE B.From_Number = A.To_Number) ELSE 'Unknown' END FROM table1 A没有测试,但是如果我理解正确,您需要通过创建子查询并使用 case 语句来检查数字是否存在,然后在肯定的情况下抓取它或返回 Unknown 作为字符串.当然,您需要添加更多内容。 -
您是否知道您所拥有的信息不足以在所有情况下回答该问题?使用您拥有的数据,如果该人在某个时间点也拨打了电话,您只能获取与呼叫接收者号码相关联的姓名。
-
好的,只是确保。作为开始的提示,请记住您可以将表连接到自身。因此,如果您的表名为
calls,您可以执行select ... from calls as callers join calls as recipients on ...,并填写该联接的逻辑(提示,您将加入两个电话号码列)。这能让你开始吗? -
这是一个很好的尝试。您应该更新您的问题以将该尝试包含为格式化代码和错误消息,而不是将其作为注释。此外,鉴于您的更新包含“未知数”,请将我的“提示”评论阅读为
left join而不是join(但也可以按照您的方式完成)
标签: sql sql-server tsql