2016-08-15 48 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的不同行合并成一行 –