相同行的SQL连接

时间:2015-07-15 19:22:01

标签: sql concatenation string-concatenation summary

我有一行打印出客户的所有联系信息(姓名,行业,网站名等)。有两个字段“电话”和“电子邮件地址”这两个字段都由rec_ID访问。 1个电话,2个电子邮件。因此,在运行时,它将打印出两行相同的信息。第一行对于电话具有空值,但是打印电子邮件,该行的第二个实例具有电话号码但对于电子邮件为空。所以我做了一个摘要行,但它只是读取第一行并将其复制到摘要行。我需要找到能够在同一行打印电子邮件和电话号码。我不知道汇总行是否必要或者是否有更好的方法。我只是不知道如何访问第二行,因为它与刚刚运行两次的第一行相同。我正在使用BIDS SSRS,其中包含我无法操作的预定义字段和表格。

当前输出如下:

TicketID: Name: Phone: Email: 
  123       Ben    555   
  123       Ben          Ben@mail.com

我想要它组合并输出:

 TicketID: Name: Phone: Email: 
  123       Ben    555   Ben@mail.com

2 个答案:

答案 0 :(得分:0)

您可以创建两个派生查询(1个用于电话,1个用于电子邮件),并使用完整连接将它们连接在一起。下面是一个例子:

declare @test table(ticketid int,rec_id int, name varchar(20), phone varchar(20), email varchar(20))

insert into @test(ticketid, rec_id, name, phone, email) values (1, 1, 'Ben', '123456', null)
insert into @test(ticketid, rec_id, name, phone, email) values (1, 2, 'Ben', null, 'test@test.com')
insert into @test(ticketid, rec_id, name, phone, email) values (2, 3, 'Ben', null, 'test2@test.com')

select phones.phone, emails.email, emails.name from 
(select ticketid, 
        rec_id, 
        phone, 
        email,
        name
from @test 
where phone is not null) phones
full join 
    (select 
        ticketid, 
        rec_id, 
        phone, 
        email,
        name
    from @test 
    where email is not null) emails
on phones.ticketid = emails.ticketid

答案 1 :(得分:0)

最简单的方法可能是对结果进行分组并选择非空字段。

select TicketID, Name, max(Phone) as Phone, max(Email) as Email
from YourTable
group by TicketID, Name