2016-08-15 51 views
0

我想做一個聯合所有產生報告的數據,下面是我到目前爲止,它顯示了我想要的所有數據,但我無法獲取相同行中的數據,它在相應的列中最少生成兩行。我希望有一種方法可以讓數據在同一行中?查看列聯合所有列兩次

select account, campaign, sale, date 
from 
(
SELECT CHACCOUNTNO as account, CONTSUPREF as campaign,null as sale, ONDATE as date 
FROM   dbo.MKTDW 
WHERE  (RESULTCODE = 'D01') and CONTACT IN ('Campaign ID') 
group by CHACCOUNTNO, CONTSUPREF, ONDATE 

UNION ALL 

SELECT CHACCOUNTNO as account, null as campaign, CONTSUPREF as sale, ONDATE as date 
FROM   dbo.MKTDW 
WHERE  (RESULTCODE = 'D01') and CONTACT IN ('Order') 
group by CHACCOUNTNO, CONTSUPREF, ONDATE 
)account 
group by account,campaign,sale,date 
order by account 

當前結果:

account     campaign sale  date      
A2043056003(2IJUMI M NULL  N177618 2014-07-21 00:00:00.000 
A2043056003(2IJUMI M LT08704 NULL  2014-07-21 00:00:00.000 

預期結果:

A2043056003(2IJUMI M)LT08704 N177618 2014年7月21日00:00:00.000

+0

你有什麼期望輸出 – TheGameiswar

+0

帳戶LT08704(競選)\t N177618(銷售)2014年7月21日00:00:00.000(日期)所有在同一行 –

回答

0

答案將是簡單的。如果你想以水平方式顯示某些東西,請使用JOIN而不是SET操作符。下面列出了代碼,經過測試,在SSMS中完美運行。 :)

--create table structure 
create table dbo.MKTDW 
( CHACCOUNTNO varchar(100), 
    CONTSUPREF varchar(10), 
    RESULTCODE varchar(10), 
    CONTACT varchar(50), 
    ONDATE datetime) 
go 

--insert sample data 
insert dbo.MKTDW 
select 'A2043056003(2IJUMI M)', 'N177618', 'D01', 'Order', '2014-07-21 00:00:00.000' 
union all 
select 'A2043056003(2IJUMI M)', 'LT08704', 'D01', 'Campaign ID', '2014-07-21 00:00:00.000' 
union all 
select 'B2043056003(2IJUMI M)', 'M000000', 'D01', 'Order', '2014-07-21 00:00:00.000' 
union all 
select 'B2043056003(2IJUMI M)', 'X111111', 'D01', 'Campaign ID', '2014-07-21 00:00:00.000' 


--below is the solution 
select a.CHACCOUNTNO as account, 
     a.CONTSUPREF as campaign, 
     b.CONTSUPREF as sale, 
     a.ondate as date   
from dbo.MKTDW as a 
join dbo.MKTDW as b 
on a.CHACCOUNTNO = b.CHACCOUNTNO 
where a.CONTACT = 'campaign id' 
     and b.CONTACT = 'order' 
     and a.RESULTCODE = 'D01' 
     and b.RESULTCODE = 'D01' 

結果:

enter image description here

+0

這真棒,謝謝亨利!我可以看到的唯一問題是它會產生重複的行(每次發生一個帳戶時都會出現一行) –

+0

請您澄清一下嗎?我沒有看到任何可能你可以得到一些dups。你有什麼樣的數據可以寫在這裏嗎? –

+0

對不起,當我嘗試粘貼示例數據,它只是一個混亂的爛攤子 –

0

有是不需要所有的工會和指定null ..

SELECT CHACCOUNTNO as account, CONTSUPREF as campaign,CONTSUPREF as sale, ONDATE as date 
FROM   dbo.MKTDW 
WHERE  (RESULTCODE = 'D01') and CONTACT IN ('Campaign ID','order') 
group by CHACCOUNTNO, CONTSUPREF, ONDATE 

當任何由列上述組的有NULL,NULL將被視爲單獨的組

+0

謝謝,但這個查詢離開'銷售'列爲每行爲空 –

+0

@CTHealthcare:見編輯答案 – TheGameiswar

+0

仍然不好,這個查詢複製'廣告系列'和'銷售'的價值觀,活動gn字段用於表中其他字段(聯繫人)爲「廣告系列ID」的值,而'sale'值爲'contact'字段爲'order'的位置 爲了說明起見,此選擇適用於補充表在我們的crm(用戶定義的字段)中有許多不同的條目用於不同的目的。 'contact'字段確定每行的條目類型,'accountno'字段是與行相關的唯一標識符。我想將每個accountno的不同行合併成一行 –