去掉空格

fzcheng 2014-09-14 11:06:55

我想把数据综合成三条记录,能够一步到位吗?
请问下大侠们
...全文
282 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
HelloWordGirl 2014-09-15
  • 打赏
  • 举报
回复
先将原始表列转行,去除为NILL的放入临时表中,然后在行专列
卖水果的net 2014-09-15
  • 打赏
  • 举报
回复

-- 应该是去掉空行
-- 小凑个人数,建表语句和 insert 拷自  5# ,我们懒人都这样。。。。。。

create  table mytest 
(
    GA varchar(20)
  , FIN varchar(20)
  , HR varchar(20)
  , VM varchar(20)
)
 
insert into mytest (GA, FIN, HR, VM)
(
select null, null, '胡XX', null union all
select null, null, null, '赵XX' union all
select null, null, null, null union all
select null, null, null, null union all
select '田XX', null, null, null union all
select null, null, null, '严XX' union all
select null, null, null, null union all
select null, null, null, null union all
select null, null, null, '郭XX' union all
select null, null, null, null union all
select null, null, null, null union all
select null, null, '陈XX', null 
)
go
 with 
 a as (select ROW_NUMBER() over(order by ga) as rn ,  GA from mytest where GA is not null) , 
 b as (select ROW_NUMBER() over(order by HR) as rn ,  HR from mytest where HR is not null) , 
 c as (select ROW_NUMBER() over(order by VM) as rn ,  VM from mytest where VM is not null) 
 select a.GA , b.HR , c.VM
 from a 
 full join  b on a.rn = b.rn 
 full join  c on isnull(a.rn , b.rn) = c.rn 
 
xiaodongni 2014-09-15
  • 打赏
  • 举报
回复
如果最终结果 不管怎么组合。第一列的数据不管和后面那一行组合都是对的。那可以按照上面的做法。 如果有要求,那么希望提供本来的ORDER BY。
Liyp92 2014-09-15
  • 打赏
  • 举报
回复
引用 8 楼 ap0405140 的回复:
[quote=引用 4 楼 fzcheng 的回复:] 田佳(经营企划科) NULL 陈怡(总务科) 郭北洋(涂装科) NULL NULL 胡梓汲(安全保卫科) 严华宁(设施管理科) NULL NULL NULL 赵刚(冲压科) 结果就是这样,结果往上
请提供"数据综合"的逻辑.[/quote]+1 有什么规律?
唐诗三百首 2014-09-14
  • 打赏
  • 举报
回复
请问要把数据综合成哪三条记录? 请提供"数据综合"的逻辑和希望的结果.
fzcheng 2014-09-14
  • 打赏
  • 举报
回复
关键是只能用SQL查询
唐诗三百首 2014-09-14
  • 打赏
  • 举报
回复
引用 4 楼 fzcheng 的回复:
田佳(经营企划科) NULL 陈怡(总务科) 郭北洋(涂装科) NULL NULL 胡梓汲(安全保卫科) 严华宁(设施管理科) NULL NULL NULL 赵刚(冲压科) 结果就是这样,结果往上
请提供"数据综合"的逻辑.
jayzhihui 2014-09-14
  • 打赏
  • 举报
回复

if OBJECT_ID('tempdb..#t') > 0 drop table #t
create table #t
(
  GA NVARCHAR(20),
  FIN NVARCHAR(20),
  HR NVARCHAR(20),
  VM NVARCHAR(20)
);

INSERT INTO #t VALUES
(null,null,'A',NULL),
(null,null,NULL,'B'),
(null,null,NULL,NULL),
(null,null,NULL,NULL),
('C',null,NULL,NULL),
(null,null,NULL,'D'),
(null,null,NULL,NULL),
(null,null,NULL,NULL),
(null,null,NULL,'E'),
(null,null,NULL,NULL),
(null,null,NULL,NULL),
(null,null,'F',NULL);



WITH CTE AS
(
	select ROW_NUMBER()over(PARTITIOn by bu order by val) id,* from #t
	unpivot
	(val for bu in(ga,fin,hr,vm))b
) 

  select * from CTE
  pivot 
  (min(val) for bu in(ga,hr,vm))b

xzb001 2014-09-14
  • 打赏
  • 举报
回复
刚刚那个多了convert(varchar(max)的转换,是多余的,测试时候用的

-- 测试数据
declare @TestData table 
(
	GA varchar(20)
  , FIN varchar(20)
  , HR varchar(20)
  , VM varchar(20)
)

insert into @TestData (GA, FIN, HR, VM)
(
	select null, null, '户', null union all
	select null, null, null, '赵' union all
	select null, null, null, null union all
	select null, null, null, null union all
	select '天', null, null, null union all
	select null, null, null, '眼' union all
	select null, null, null, null union all
	select null, null, null, null union all
	select null, null, null, '过' union all
	select null, null, null, null union all
	select null, null, null, null union all
	select null, null, '陈', null 
);

-- 列转行
with T1 as
(
	select *
	from
	(
		select *
		from @TestData
	) x
	unpivot
	(
		val for ky in (GA, FIN, HR, VM)
	) y
)

-- 分组
, T2 as
(
	select *
		 , rn = row_number() over(partition by ky order by val)
	from T1
)


-- 行转列
select *
from
(
	select *
	from T2
) x
pivot
(
	max(val) for ky in (GA, FIN, HR, VM)
) y
xzb001 2014-09-14
  • 打赏
  • 举报
回复

-- 测试数据
declare @TestData table 
(
	GA varchar(20)
  , FIN varchar(20)
  , HR varchar(20)
  , VM varchar(20)
)

insert into @TestData (GA, FIN, HR, VM)
(
select null, null, '户', null union all
select null, null, null, '赵' union all
select null, null, null, null union all
select null, null, null, null union all
select '天', null, null, null union all
select null, null, null, '眼' union all
select null, null, null, null union all
select null, null, null, null union all
select null, null, null, '过' union all
select null, null, null, null union all
select null, null, null, null union all
select null, null, '陈', null 
);

-- 列转行
with T1 as
(
	select *
	from
	(
		select GA = convert(varchar(max),GA)
			 , FIN = convert(varchar(max),FIN)
			 , HR = convert(varchar(max),HR)
			 , VM = convert(varchar(max),VM)
		from @TestData
	) x
	unpivot
	(
		val for ky in (GA, FIN, HR, VM)
	) y
)

-- 分组
, T2 as
(
	select *
		 , rn = row_number() over(partition by ky order by val)
	from T1
)


-- 行转列
select *
from
(
	select *
	from T2
) x
pivot
(
	max(val) for ky in (GA, FIN, HR, VM)
) y
fzcheng 2014-09-14
  • 打赏
  • 举报
回复
田佳(经营企划科) NULL 陈怡(总务科) 郭北洋(涂装科) NULL NULL 胡梓汲(安全保卫科) 严华宁(设施管理科) NULL NULL NULL 赵刚(冲压科) 结果就是这样,结果往上
reenjie 2014-09-14
  • 打赏
  • 举报
回复
不知道你的逻辑是什么。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧