如何在SQL中连接动态表和表

时间:2014-10-31 07:36:01

标签: sql-server

我有两张表PhoneName。 表格Name包含两个字段NamePhoneNo。 表格Phone包含PhoneNocall duration。 表名

Name     PhoneNo.

A         1111

B         2222

C         3333

电话表中的数据

PhoneNo        CallDuration

1111            30

5555            40

6666            30

1111            20

6666            10

2222            5

结果应该是一个包含两列Calleroccurrence的表格。如果caller表格中存在Name,那么她或Name应该位于Caller列中,并且不会调用(来自Phone表),否则{ {1}}应显示在Number列中。 以下示例的结果应该是这样的

caller

我试过这个,但现在我不知道如何检查数字是否在名称表中

Caller     Ocucrnce

A             2

B             1

5555          1

6666          2

4 个答案:

答案 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

在这两种情况下,结果都是您想要的结果