>

전화 번호가 표시되는 각 판매 캠페인을 보여주는 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

이 결과를 반환하는 데이터 (데이터 예) :

이 예에서 나는 얻을 것이다

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

이전에 크로스 태빙으로 작업 한 적이 없지만 작동하는 것처럼 보이지만 가능한 한 제대로 작동하지 못했습니다. 분명히, 나는 이들 각각의 MIN과 MAX를 할 수 있지만 Excel과 같은 것을 사용하여 수동으로하지 않고도 데이터를 한 줄에 넣을 수있는 방법을 모른다. 시간이 없어요.

아래에서 얻은 도움을받지 않기 위해 작동 한 정확한 코드는 다음과 같습니다.

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

  • 답변 # 1

    SQL 서버를 사용하는 경우 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
    
    

  • 답변 # 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
    
    

    트릭을하는 것

관련 자료

  • 이전 angular - JSON 데이터에서 채워진 드롭 다운
  • 다음 ef code first - 유창한 API를 사용하여 모든 엔티티 필드를 필수로 설정하십시오