我有两张表Phone
和Name
。
表格Name
包含两个字段Name
和PhoneNo
。
表格Phone
包含PhoneNo
和call duration
。
表名
Name PhoneNo.
A 1111
B 2222
C 3333
电话表中的数据
PhoneNo CallDuration
1111 30
5555 40
6666 30
1111 20
6666 10
2222 5
结果应该是一个包含两列Caller
和occurrence
的表格。如果caller
表格中存在Name
,那么她或Name
应该位于Caller
列中,并且不会调用(来自Phone
表),否则{ {1}}应显示在Number
列中。
以下示例的结果应该是这样的
caller
我试过这个,但现在我不知道如何检查数字是否在名称表中
Caller Ocucrnce
A 2
B 1
5555 1
6666 2
答案 0 :(得分:1)
这个怎么样?
select
PhoneNo = isnull(n.name, p.PhoneNo),
Occurence = count(*)
from phone p
left join name n
on n.PhoneNo = p.PhoneNo
group by
p.phoneNo, n.name
修改强>
要包含C
,请尝试以下操作:
select
PhoneNo = isnull(n.name, p.PhoneNo),
Occurence = count(p.phoneNo)
from phone p
full join name n
on n.PhoneNo = p.PhoneNo
group by
p.phoneNo, n.name
答案 1 :(得分:0)
试试这个:简单加入Count
可以在这里工作。计数将计算出现次数
select case when ph.Name is NULL then cal.PhoneNo else ph.Name end
,COUNT(*) as Occrnce
from PhoneNo ph left join CallDuration cal
on ph.PhoneNO=cal.PhoneNo
答案 2 :(得分:0)
试试这个
SELECT isnull(Caller ,PhoneNo) as Caller
,COUNT(*) AS CALLER
FROM PhoneNo AS p
LEFT JOIN NameTable AS n ON p.PhoneNo = n.PhoneNo
GROUP BY PhoneNo,Caller
通过PhoneNo进行分组,并使用left加入来检查名称表中是否有任何出现...
答案 3 :(得分:0)
获取使用Name
表加入查询结果所需的名称,例如:
SELECT ISNULL(n.Name,p.PhoneNo) as Caller, Occurences
FROM (SELECT PhoneNo, COUNT(*) AS Occurences
FROM Phone
GROUP BY PhoneNo) p
LEFT OUTER JOIN Name n ON p.PhoneNo=n.PhoneNo
或者您可以加入这两个表,然后按Phone.PhoneNo
和' Name.Name`分组,如wewesthemenace建议:
select
PhoneNo = isnull(n.name, p.PhoneNo),
Occurence = count(*)
from phone p
left join name n
on n.PhoneNo = p.PhoneNo
group by
p.phoneNo, n.name
在这两种情况下,结果都是您想要的结果