导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

一个很简单的字段拼接问题

wxf87541163 2007-12-07 02:16:07
有一张表:Product

产品名称 单位 高度 胸径 冠幅 地径 备注
---------------------------------------------------
斑竹 棵 100 200 30 20 rewr
扁桃 20 0 32 32
地柏 棵 0 44 0 20 3213

我想写个存储过程得到这样的表:

产品名称 规格信息
-------------------------------------------------------------------
斑竹 单位:棵;高度:100;胸径:200;冠幅:30;地径:20;备注:rewr;
扁桃 高度:20;冠幅:32;地径:32;
地柏 单位:棵;胸径:44;地径:20;备注:3213;

主要就是判断一下字段里面的值,比如说 单位等varchar类型如果为‘’就不显示,高度等int类型的为0就不显示
请问怎样判断和转换比较好啊?
...全文
75 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxf87541163 2007-12-07
yesyesyes 我是要在页面上面显示出来 因为字段比较多 20多个吧 而且有的产品不是所有字段都有 不可能吧每个字段都显示出来 所有只显示一个总的信息
回复
yesyesyes 2007-12-07
我看其实没必要
原来的表就很好
回复
wxf87541163 2007-12-07
真的非常感谢大家的帮忙!!o(∩_∩)o...
回复
kk19840210 2007-12-07

上面错了不好意识

select 产品名称,规格信息=case when convert(varchar(10),单位)<>'' and convert(varchar(10),单位)<>'0' then '单位:'+单位+';' else '' end
+case when convert(varchar(10),高度)<>'' and convert(varchar(10),高度)<>'0' then '高度:'+convert(varchar(10),高度)+';'else '' end
+case when convert(varchar(10),胸径)<>'' and convert(varchar(10),胸径)<>'0' then '胸径:'+convert(varchar(10),胸径)+';'else '' end
+case when convert(varchar(10),冠幅)<>'' and convert(varchar(10),冠幅)<>'0' then '冠幅:'+convert(varchar(10),冠幅)+';'else '' end
+case when convert(varchar(10),地径)<>'' and convert(varchar(10),地径)<>'0' then '地径:'+convert(varchar(10),地径)+';'else '' end
+case when convert(varchar(10),备注)<>'' and convert(varchar(10),备注)<>'0' then '备注:'+备注+';' else '' end
from product

产品名称 规格信息
---------- ------------------------------------------------------------------------------------------------
斑竹 单位:棵;高度:100;胸径:200;冠幅:30;地径:20;备注:rewr;
扁桃 高度:20;冠幅:32;地径:32;
地柏 单位:棵;胸径:44;地径:20;备注:3213;

(3 行受影响)


回复
wxf87541163 2007-12-07
无枪狙击手 这样只是不为NULL才显示,我现在表里面没有NULL的值,都设了默认值的,varchar为'',int为0,我想如果里面没有插入数据的话 字段名也不显示,比如:【扁桃】的胸径为0,备注为''就不显示出来——高度:20;冠幅:32;地径:32;
求解。。。
回复
kk19840210 2007-12-07


create table Product(产品名称 varchar(10),单位 varchar(10),高度 int, 胸径 int, 冠幅 int, 地径 int, 备注 varchar(10))


insert into product values('斑竹','棵',100,200,30,20,'rewr')

insert into product values('扁桃','',20,0,32,32,'')

insert into product values('地柏','棵',0,44,0,20,'3213')


select * from product

select 产品名称,规格信息=case when convert(varchar(10),单位)<>'' or convert(varchar(10),单位)<>'0' then '单位:'+单位 else '' end
+case when convert(varchar(10),高度)<>'' or convert(varchar(10),高度)<>'0' then '高度:'+convert(varchar(10),高度)+';'else '' end
+case when convert(varchar(10),胸径)<>'' or convert(varchar(10),胸径)<>'0' then '胸径:'+convert(varchar(10),胸径)+';'else '' end
+case when convert(varchar(10),冠幅)<>'' or convert(varchar(10),冠幅)<>'0' then '冠幅:'+convert(varchar(10),冠幅)+';'else '' end
+case when convert(varchar(10),地径)<>'' or convert(varchar(10),地径)<>'0' then '地径:'+convert(varchar(10),地径)+';'else '' end
+case when convert(varchar(10),备注)<>'' or convert(varchar(10),备注)<>'0' then '备注:'+备注 else '' end
from product




产品名称 规格信息
---------- ----------------------------------------------------------------------------------------------
斑竹 单位:棵高度:100;胸径:200;冠幅:30;地径:20;备注:rewr
扁桃 单位:高度:20;胸径:0;冠幅:32;地径:32;备注:
地柏 单位:棵高度:0;胸径:44;冠幅:0;地径:20;备注:3213

(3 行受影响)
回复
dawugui 2007-12-07
--按你的要求应该是这样:
select 产品名称 , 规格信息 = '单位:' + 单位 + ';' +
case when 高度 = 0 then '' else '高度:' + cast(高度 as varchar) end + ';' +
case when 胸径 = 0 then '' else '胸径:' + cast(胸径 as varchar) end + ';' +
case when 冠幅 = 0 then '' else '冠幅:' + cast(冠幅 as varchar) end + ';' +
case when 地径 = 0 then '' else '地径:' + cast(地径 as varchar) end + ';' +
case when 备注 = '' then '' else '备注:' + cast(地径 as varchar) end + ';'
from tb
回复
dawugui 2007-12-07
select 产品名称 , 规格信息 = '单位:' + 单位 + ';' + 
'高度:' + case when 高度 = 0 then '' else cast(高度 as varchar) end + ';' +
'胸径:' + case when 胸径 = 0 then '' else cast(胸径 as varchar) end + ';' +
'冠幅:' + case when 冠幅 = 0 then '' else cast(冠幅 as varchar) end + ';' +
'地径:' + case when 地径 = 0 then '' else cast(地径 as varchar) end + ';' +
'备注:' + case when 备注 = '' then '' else cast(地径 as varchar) end + ';'
from tb
回复
dawugui 2007-12-07
select 产品名称 , '单位' + 单位 + ';' + '高度' + case when 高度 = 0 then '' else cast(高度 as varchar) end + 其他一样 from tb
回复
-狙击手- 2007-12-07
select 产品名称 ,
[规格信息] = '单位:'+ltrim(单位)+'; 高度:'+ltrim(高度)+';胸径:'+ltrim(胸径)+';冠幅:'+ltrim(冠幅)+';地径:'+地径+';备注:'+ltrim(备注)
from table

所有全加上这个ltrim()
回复
-狙击手- 2007-12-07
select 产品名称 ,
[规格信息] = '单位:'+ltrim(单位)+'; 高度:'+ltrim(高度)+';胸径:'+ltrim(胸径)+';冠幅:'+ltrim(冠幅)+';地径:'+地径+';备注:'+ltrim(备注)
from table

所有全加上这个ltrim()
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告