求一SQL查询

斗尧 2014-07-03 09:28:02


表数据
id val
1 aaa#2,bbb#2,ccc#4
2 bbb#3,ddd#5
3 ccc#3
4 aaa#5,ddd#3

想得到数据
id aaa bbb ccc ddd
1 2 2 4 0
2 0 3 0 5
3 0 0 3 0
4 5 0 0 3


求各位大神帮忙
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
斗尧 2014-07-03
  • 打赏
  • 举报
回复
引用 5 楼 sc273607742 的回复:

if exists(select 1 from sys.tables where name='test')
drop table test
create  table test(id int,val varchar(100))
insert into test
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aa#5,ddd#3'

declare @sql varchar(max)

select @sql=ISNULL(@sql,'')+',max(case when charindex('','+val+'#'','',''+val+''#'')>0 
then substring(val,charindex('','',val+'','',charindex('''+val+''',val))-1,1) else 0 end) ''' +val+''''
from (
select distinct 
SUBSTRING(val+'#',number,CHARINDEX('#',val+'#',number)-number) val
from test,master..spt_values where type='p'
and SUBSTRING(','+val,number,1)=',')a
exec( 'select id'+@sql+' from test group by id')
这样应该就行了

if exists(select 1 from sys.tables where name='test')
drop table test
create  table test(id int,val varchar(100))
insert into test
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aa#5,ddd#3' union
select 5 'aa#12,bbb#123,ccc#22'

declare @sql varchar(max)

select @sql=ISNULL(@sql,'')+',max(case when charindex('','+val+'#'','',''+val+''#'')>0 
then substring(val,charindex('','',val+'','',charindex('''+val+''',val))-1,1) else 0 end) ''' +val+''''
from (
select distinct 
SUBSTRING(val+'#',number,CHARINDEX('#',val+'#',number)-number) val
from test,master..spt_values where type='p'
and SUBSTRING(','+val,number,1)=',')a
exec( 'select id'+@sql+' from test group by id')
大神你这里只能取到个位数的数据啊,再加一行 5 'aa#12,bbb#123,ccc#22' !就不行了
哥眼神纯洁不 2014-07-03
  • 打赏
  • 举报
回复
引用 4 楼 bf6688 的回复:
[quote=引用 3 楼 sc273607742 的回复:] [quote=引用 2 楼 bf6688 的回复:] [quote=引用 1 楼 sc273607742 的回复:]

with a(id,val)as(
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aaa#5,ddd#3'
)
select id
,substring(val,case when CHARINDEX('aaa',val)+4 =4 then 0 else CHARINDEX('aaa',val)+4 end,1)+0 aaa
,substring(val,case when CHARINDEX('bbb',val)+4 =4 then 0 else CHARINDEX('bbb',val)+4 end,1)+0 bbb
,substring(val,case when CHARINDEX('ccc',val)+4 =4 then 0 else CHARINDEX('ccc',val)+4 end,1)+0 ccc
,substring(val,case when CHARINDEX('ddd',val)+4 =4 then 0 else CHARINDEX('ddd',val)+4 end,1)+0 ddd
from a
谢谢你的回答,但是val里的数值有可能是两位数,三位数的..[/quote] 你的aaa,bbb,ccc 是不是也是不确定的?[/quote] 嗯,不确定的![/quote]

if exists(select 1 from sys.tables where name='test')
drop table test
create  table test(id int,val varchar(100))
insert into test
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aa#5,ddd#3'

declare @sql varchar(max)

select @sql=ISNULL(@sql,'')+',max(case when charindex('','+val+'#'','',''+val+''#'')>0 
then substring(val,charindex('','',val+'','',charindex('''+val+''',val))-1,1) else 0 end) ''' +val+''''
from (
select distinct 
SUBSTRING(val+'#',number,CHARINDEX('#',val+'#',number)-number) val
from test,master..spt_values where type='p'
and SUBSTRING(','+val,number,1)=',')a
exec( 'select id'+@sql+' from test group by id')
这样应该就行了
斗尧 2014-07-03
  • 打赏
  • 举报
回复
引用 3 楼 sc273607742 的回复:
[quote=引用 2 楼 bf6688 的回复:] [quote=引用 1 楼 sc273607742 的回复:]

with a(id,val)as(
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aaa#5,ddd#3'
)
select id
,substring(val,case when CHARINDEX('aaa',val)+4 =4 then 0 else CHARINDEX('aaa',val)+4 end,1)+0 aaa
,substring(val,case when CHARINDEX('bbb',val)+4 =4 then 0 else CHARINDEX('bbb',val)+4 end,1)+0 bbb
,substring(val,case when CHARINDEX('ccc',val)+4 =4 then 0 else CHARINDEX('ccc',val)+4 end,1)+0 ccc
,substring(val,case when CHARINDEX('ddd',val)+4 =4 then 0 else CHARINDEX('ddd',val)+4 end,1)+0 ddd
from a
谢谢你的回答,但是val里的数值有可能是两位数,三位数的..[/quote] 你的aaa,bbb,ccc 是不是也是不确定的?[/quote] 嗯,不确定的!
哥眼神纯洁不 2014-07-03
  • 打赏
  • 举报
回复
引用 2 楼 bf6688 的回复:
[quote=引用 1 楼 sc273607742 的回复:]

with a(id,val)as(
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aaa#5,ddd#3'
)
select id
,substring(val,case when CHARINDEX('aaa',val)+4 =4 then 0 else CHARINDEX('aaa',val)+4 end,1)+0 aaa
,substring(val,case when CHARINDEX('bbb',val)+4 =4 then 0 else CHARINDEX('bbb',val)+4 end,1)+0 bbb
,substring(val,case when CHARINDEX('ccc',val)+4 =4 then 0 else CHARINDEX('ccc',val)+4 end,1)+0 ccc
,substring(val,case when CHARINDEX('ddd',val)+4 =4 then 0 else CHARINDEX('ddd',val)+4 end,1)+0 ddd
from a
谢谢你的回答,但是val里的数值有可能是两位数,三位数的..[/quote] 你的aaa,bbb,ccc 是不是也是不确定的?
斗尧 2014-07-03
  • 打赏
  • 举报
回复
引用 1 楼 sc273607742 的回复:

with a(id,val)as(
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aaa#5,ddd#3'
)
select id
,substring(val,case when CHARINDEX('aaa',val)+4 =4 then 0 else CHARINDEX('aaa',val)+4 end,1)+0 aaa
,substring(val,case when CHARINDEX('bbb',val)+4 =4 then 0 else CHARINDEX('bbb',val)+4 end,1)+0 bbb
,substring(val,case when CHARINDEX('ccc',val)+4 =4 then 0 else CHARINDEX('ccc',val)+4 end,1)+0 ccc
,substring(val,case when CHARINDEX('ddd',val)+4 =4 then 0 else CHARINDEX('ddd',val)+4 end,1)+0 ddd
from a
谢谢你的回答,但是val里的数值有可能是两位数,三位数的..
哥眼神纯洁不 2014-07-03
  • 打赏
  • 举报
回复

with a(id,val)as(
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aaa#5,ddd#3'
)
select id
,substring(val,case when CHARINDEX('aaa',val)+4 =4 then 0 else CHARINDEX('aaa',val)+4 end,1)+0 aaa
,substring(val,case when CHARINDEX('bbb',val)+4 =4 then 0 else CHARINDEX('bbb',val)+4 end,1)+0 bbb
,substring(val,case when CHARINDEX('ccc',val)+4 =4 then 0 else CHARINDEX('ccc',val)+4 end,1)+0 ccc
,substring(val,case when CHARINDEX('ddd',val)+4 =4 then 0 else CHARINDEX('ddd',val)+4 end,1)+0 ddd
from a
哥眼神纯洁不 2014-07-03
  • 打赏
  • 举报
回复
引用 2 楼 bf6688 的回复:
[quote=引用 1 楼 sc273607742 的回复:]

with a(id,val)as(
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aaa#5,ddd#3'
)
select id
,substring(val,case when CHARINDEX('aaa',val)+4 =4 then 0 else CHARINDEX('aaa',val)+4 end,1)+0 aaa
,substring(val,case when CHARINDEX('bbb',val)+4 =4 then 0 else CHARINDEX('bbb',val)+4 end,1)+0 bbb
,substring(val,case when CHARINDEX('ccc',val)+4 =4 then 0 else CHARINDEX('ccc',val)+4 end,1)+0 ccc
,substring(val,case when CHARINDEX('ddd',val)+4 =4 then 0 else CHARINDEX('ddd',val)+4 end,1)+0 ddd
from a
谢谢你的回答,但是val里的数值有可能是两位数,三位数的..[/quote]

if exists(select 1 from sys.tables where name='test')
drop table test
create  table test(id int,val varchar(100))
insert into test
select 1,'aaa#2,bbb#2,ccc#4' union 
select 2,'bbb#3,ddd#5' union
select 3,'ccc#3' union
select 4,'aa#5,ddd#3' union
select 5,'aa#12,bbb#123,ccc#22'

declare @sql varchar(max)

select @sql=ISNULL(@sql,'')+',max(case when charindex('','+val+'#'','',''+val+''#'')>0 
then substring(val+'','',charindex(''#'',val,charindex('''+val+''',val))+1,
                         charindex('','',val+'','',charindex('''+val+''',val))
                         -charindex(''#'',val,charindex('''+val+''',val))-1
                         ) else 0 end) ''' +val+''''
from (
select distinct 
SUBSTRING(val+'#',number,CHARINDEX('#',val+'#',number)-number) val
from test,master..spt_values where type='p'
and SUBSTRING(','+val,number,1)=',')a
exec( 'select id'+@sql+' from test group by id')
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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