Sql server 如何在SQL中连接动态表和表
我有两张桌子Sql server 如何在SQL中连接动态表和表,sql-server,Sql Server,我有两张桌子Phone和Name。 表Name包含两个字段Name和PhoneNo。 表电话包含电话号码和通话持续时间。 表名 Name PhoneNo. A 1111 B 2222 C 3333 和电话表中的数据 PhoneNo CallDuration 1111 30 5555 40 6666 30 1111 20 6
Phone
和Name
。
表Name
包含两个字段Name
和PhoneNo
。
表电话
包含电话号码
和通话持续时间
。
表名
Name PhoneNo.
A 1111
B 2222
C 3333
和电话表中的数据
PhoneNo CallDuration
1111 30
5555 40
6666 30
1111 20
6666 10
2222 5
结果应该是一个表,该表将包含两列调用者
和事件
。如果呼叫者
存在于姓名
表中,则她或他的姓名
应出现在呼叫者
列中,且其呼叫次数(从电话
表中)否则号码
应出现在呼叫者
列中。
下面示例的结果应该是这样的
Caller Ocucrnce
A 2
B 1
5555 1
6666 2
我已经试过了,但现在我不知道如何检查这个数字是否在名称表中
select PhoneNo,COUNT(*) as CALLER from PhoneNo GROUP BY PhoneNo
试试这个:使用
Count
的简单连接可以在这里工作。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
这个怎么样
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
试试这个
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分组,并通过使用join…来检查名称表中是否有出现,以获取将查询结果与
名称
表联接所需的名称,例如:
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
或者,您可以将两个表连接起来,然后按照wewesthemenace建议的那样,按Phone.PhoneNo
和'Name.Name'分组:
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
在这两种情况下,结果都是您想要的结果您自己是否尝试过任何方法,或者您只是希望我们为您完成工作?请查看我的答案。在此查询中,呼叫者名称不出现。您的架构中没有呼叫者名称的信息。。。我们没有足够的信息这不是我的问题,但请查看所需的输出。callerName表示名称字段。更新了我的答案@NavneetThis将无法编译,您需要指定要使用的两个PhoneNo列中的哪一个。如果使用“名称”表中的名称,您将错过此查询中不带名称的条目“C”用户记录不需要。@Navneet否,它将返回所需的结果。如果我还需要电话表中不存在的名称,它将返回所需的结果。就像我的例子“C”。在最终结果中,“C”也以“0”的形式出现。最终结果应该与此查询中的调用者Occronce A 2 B 1 5555 1 6666 2 C 0类似。调用者No not come。