【问题标题】:SQL Server : show campaigns that a phone number appears inSQL Server:显示出现电话号码的活动
【发布时间】:2019-01-01 05:19:37
【问题描述】:

我正在尝试在 SQL Server 中生成一份报告,以显示每个销售活动中出现电话号码的情况。

想要的结果:

Phonenumber | Area Code | Campaign 1 | Campaign 2 (if applicable) etc...

我有以下代码:

with cids as 
(
    select distinct 
        a.outbound_cid as [CID],
        a.areacode as [AreaCode],
        a.campaign_id as [Campaign]
    from 
        vicislave...vicidial_campaign_cid_areacodes a
    join 
        LDS_SALES_CAMPAIGNS b on a.campaign_id = b.campaign_id
)
select * 
from cids
order by cid

返回此结果(数据示例):

在这个例子中,我会得到 ​​p>

2012444340 201 ZEPTR  ZEACC ZBEASTC ZEPRR InBnd2 ZEPSC ZEJCC ZEJSC ZEPCC ZEASC

我以前没有使用过交叉表,但它似乎可以工作,但我无法让它像我一样工作。显然,我可以做每一个的 MIN 和 MAX,但我不知道有一种方法可以将数据放入一行,即使使用 Excel 之类的东西,也不需要手动执行,这些结果为 1110,我真的没有时间去做。

不要模仿我从下面得到的帮助,这里是有效的确切代码:

select distinct 
    a.outbound_cid as [CID],
    a.areacode as [AreaCode],
    a.campaign_id as [Campaign]
into 
    #CIDs
from 
    vicislave...vicidial_campaign_cid_areacodes a
join 
    LDS_SALES_CAMPAIGNS b on a.campaign_id = b.campaign_id


select distinct 
    CID,
    areacode,
    Campaign = stuff((select ', ' + c2.campaign 
                      from #CIDs c2 
                      where c2.CID = c.CID 
                      for xml path(''), type).value('.', 'nvarchar(MAX)'), 1, 1, '')
from 
    #cids c

drop table #CIDs

【问题讨论】:

  • This 应该会有所帮助。你基本上必须使用GROUP_CONCAT
  • @GordonLinoff 我做了 - SQL。猜猜我可以使用基础 MS SQL。

标签: sql sql-server database crosstab


【解决方案1】:

如果你使用 SQL server,你可以使用 STUFF 函数。您可以按照我的示例进行操作。希望能帮到你,我的朋友!

Create table Test(CID nvarchar(10)
                , AreaCode nvarchar(10)
                , Campaign nvarchar(10)) 
Insert into Test(CID, AreaCode, Campaign) 
            values('2012', '201', 'ABC')
Insert into Test(CID, AreaCode, Campaign) 
            values('2012', '201', 'XYZ')
Insert into Test(CID, AreaCode, Campaign) 
            values('2014', '201', 'aaa')
Insert into Test(CID, AreaCode, Campaign) 
            values('2014', '201', 'bbb')

-----------
SELECT distinct CID      
    , Campaign = STUFF((
          SELECT ',' + t2.Campaign
          FROM Test t2
          WHERE t.CID = t2.CID
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Test t
ORDER BY t.CID

【讨论】:

  • 这适用于我添加的小改动。谢谢!
  • @dragos_kai:是的!你太棒了:))
【解决方案2】:

要从任何带有字段“field”的表“TABLE”中获取单个记录,您必须这样做

SELECT ';'+rtrim(field)
FROM TABLE FOR XML PATH('') 

Tha 将返回一条记录,其中所有字段都用“;”连接

在你的情况下,你应该这样做:

    select ';'+campaign from cids FOR XML PATH('') 
    order by cid

当然,如果需要,您甚至可以按 CID 列分组...

SELECT C.CID, (
    select ';'+campaign from cids
    where cids.CID=C.CID
    FOR XML PATH(''))
from CIDS C
group by CID

这样就可以了

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2016-07-02
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多