请大家看看这个试图怎么能做出来。

黑马老窦 2004-10-29 10:40:48
原表
ZWKMZD_KMBH ZWKMZD_KMMC
------------------------------ -------------
2105 内部存款
21050001 自有资金
210500010001 深圳一部
210500010002 深圳二部
210500010003 深圳三部

能不能做这样的一个试图
ZWKMZD_KMBH ZWKMZD_KMMC ZWKMZD_FULLKMMC
------------------------------ ------------- ------------
2105 内部存款 内部存款
21050001 自有资金 内部存款-自有资金
210500010001 深圳一部 内部存款-自有资金-深圳一部
210500010002 深圳二部 内部存款-自有资金-深圳二部
210500010003 深圳三部 内部存款-自有资金-深圳三部
...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaandys 2004-10-29
  • 打赏
  • 举报
回复
select id=identity(int,1,1),* into tmp from 表
go
create function addZWKMZD_KMMC(@id int)
returns varchar(100)
as
begin
declare @sql varchar(3000)
set @sql=''
select @sql=@sql+'-'+ZWKMZD_KMMC from tmp where id<=@id
select @sql=stuff(@sql,1,1,'')
return @sql
end
go
drop function addZWKMZD_KMMC
go
zjcxc 元老 2004-10-29
  • 打赏
  • 举报
回复
create view 视图名
as
--或者这样写,效率高

select a.ZWKMZD_KMBH,a.ZWKMZD_KMMC
,ZWKMZD_FULLKMMC
=isnull(c.ZWKMZD_KMMC+'-'+b.ZWKMZD_KMMC+'-'+a.ZWKMZD_KMMC
,isnull(b.ZWKMZD_KMMC+'-'+a.ZWKMZD_KMMC,a.ZWKMZD_KMMC))
from 原表 a
left join 原表 b
on len(a.ZWKMZD_KMBH)>4
and left(a.ZWKMZD_KMBH,4)=b.ZWKMZD_KMBH
left join 原表 c
on len(a.ZWKMZD_KMBH)>8
and left(a.ZWKMZD_KMBH,8)=c.ZWKMZD_KMBH
changlin365 2004-10-29
  • 打赏
  • 举报
回复
up
zjcxc 元老 2004-10-29
  • 打赏
  • 举报
回复
--测试

--测试数据
create table 原表(ZWKMZD_KMBH varchar(12),ZWKMZD_KMMC varchar(10))
insert 原表 select '2105' ,'内部存款'
union all select '21050001' ,'自有资金'
union all select '210500010001','深圳一部'
union all select '210500010002','深圳二部'
union all select '210500010003','深圳三部'
go

--创建视图
create view 视图名
as
select ZWKMZD_KMBH,ZWKMZD_KMMC
,ZWKMZD_FULLKMMC=case
when len(ZWKMZD_KMBH)=4 then ZWKMZD_KMMC
else(select top 1 ZWKMZD_KMMC from 原表 where ZWKMZD_KMBH=left(a.ZWKMZD_KMBH,4))
+'-'+case
when len(ZWKMZD_KMBH)=8 then ZWKMZD_KMMC
else (select top 1 ZWKMZD_KMMC from 原表 where ZWKMZD_KMBH=left(a.ZWKMZD_KMBH,8))
+'-'+ZWKMZD_KMMC
end
end
from 原表 a
go

--显示
select * from 视图名
go

--删除测试
drop table 原表
drop view 视图名

/*--测试结果

ZWKMZD_KMBH ZWKMZD_KMMC ZWKMZD_FULLKMMC
------------ ----------- --------------------------------
2105 内部存款 内部存款
21050001 自有资金 内部存款-自有资金
210500010001 深圳一部 内部存款-自有资金-深圳一部
210500010002 深圳二部 内部存款-自有资金-深圳二部
210500010003 深圳三部 内部存款-自有资金-深圳三部

(所影响的行数为 5 行)
--*/
yown 2004-10-29
  • 打赏
  • 举报
回复
写一个函数处理最后一个字段
zjcxc 元老 2004-10-29
  • 打赏
  • 举报
回复
--少了-

create view 视图名
as
select ZWKMZD_KMBH,ZWKMZD_KMMC
,ZWKMZD_FULLKMMC=case
when len(ZWKMZD_KMBH)=4 then ZWKMZD_KMMC
else(select top 1 ZWKMZD_KMMC from 原表 where ZWKMZD_KMBH=left(a.ZWKMZD_KMBH,4))
+'-'+case
when len(ZWKMZD_KMBH)=8 then ZWKMZD_KMMC
else (select top 1 ZWKMZD_KMMC from 原表 where ZWKMZD_KMBH=left(a.ZWKMZD_KMBH,8))
+'-'+ZWKMZD_KMMC
end
end
from 原表 a
zjcxc 元老 2004-10-29
  • 打赏
  • 举报
回复
create view 视图名
as
select ZWKMZD_KMBH,ZWKMZD_KMMC
,ZWKMZD_FULLKMMC=case
when len(ZWKMZD_KMBH)=4 then ZWKMZD_KMMC
else(select top 1 ZWKMZD_KMMC from 原表 where ZWKMZD_KMBH=left(a.ZWKMZD_KMBH,4))
+case
when len(ZWKMZD_KMBH)=8 then ZWKMZD_KMMC
else (select top 1 ZWKMZD_KMMC from 原表 where ZWKMZD_KMBH=left(a.ZWKMZD_KMBH,8))
+ZWKMZD_KMMC
end
end
from 原表 a
skyboy0720 2004-10-29
  • 打赏
  • 举报
回复
如果有主键,可以这样

------用个函数处理-----

create function f_sx(@id int)
returns varchar(1000)
as
begin
declare @s varchar(1000)
set @s=''
select @s=name+@s+'-' from 表 where 主键<=@id order by id
return @s
end

select *,ZWKMZD_FULLKMMC=dbo.f_sx(主键) from 表 order by 主键

skyboy0720 2004-10-29
  • 打赏
  • 举报
回复
没有主键?
黑马老窦 2004-10-29
  • 打赏
  • 举报
回复
试图 的列为:
ZWKMZD_KMBH ZWKMZD_KMMC ZWKMZD_FULLKMMC

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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