这个 sql 语句该如何写??

pwlxj 2005-11-07 10:56:05
有表a
字段:xm    pj(评价)    dj(统计)
张三   ABCDE     1A1B1C1D1E
李四   AABBC    2A2B1C
王五   BBCBE    3B2C1E

       .......

"PJ"字段 是随意组合的"A,B,C,D,E,F"
'DJ' 字段的内容实际上是对"PJ" 字段 的统计
现在如何用SQL 语句 自动修改 "DJ" 字段的内容!
...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pwlxj 2005-11-07
  • 打赏
  • 举报
回复
我马上测试
pwlxj 2005-11-07
  • 打赏
  • 举报
回复
非常感谢!!!!!
 我真是知识浅薄!!!!
还要多学习!
samfeng_2003 2005-11-07
  • 打赏
  • 举报
回复
因为只有将[create]打上括号才能上传,所以请把括号[]去掉。对于该表我有个建议,那么就是你需要个表建立一个主键,要不可能会出现多条重复列。我在表中加了个identity的列id来做定向,要不出现重复列是无法准确更新的。

/*--------------建表--------------*/
[create] table a
(id int identity(1,1),xm varchar(20),pj varchar(50),dj varchar(50))
go
/*---------------函数来计算表中字符个数--------------*/
create function f_dj(@col varchar(2000))
returns varchar(2000)
as
begin
declare @sql varchar(2000)
declare @t table (id int identity(1,1),col varchar(2))
set @sql=''
while(len(@col)>0)
begin
insert @t values (left(@col,1))
set @col=stuff(@col,1,1,'')
end
select @sql=@sql+cast(c as varchar)+col from
(
select id,col,c=(select count(1) from @t where col=a.col) from @t a
) a where (select count(*) from
(
select id,col,c=(select count(1) from @t where col=a.col) from @t a
) b where a.col=b.col and a.c=b.c and a.id>b.id)<1
return(@sql)
end
go
/*-----------------------触发器来实现更新---------------------*/
create trigger tr_a
on a
for insert,update
as
set xact_abort on
begin tran
update a set dj=dbo.f_dj(b.pj)
from inserted b,a
where a.id=b.id
commit tran
go

/*--------------测试区---------------*/
insert into a values ('张三','ABCDE',null)
select * from a

update a set pj='BBDREF' where id=1
select * from a
insert into a values ('李四','TFDKD',null)
insert into a values ('王五','FDKKDFM',null)
insert into a values ('唐六','DKBVHKD',null)
select * from a

/*----------------删除环境-----------------*/
drop trigger tr_a
drop function dbo.f_dj
drop table a


/*----------------执行情况-----------------*/

id xm pj dj
----------- -------------------- -------------------------------------------------- --------------------------------------------------
1 张三 ABCDE 1A1B1C1D1E

(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)

id xm pj dj
----------- -------------------- -------------------------------------------------- --------------------------------------------------
1 张三 BBDREF 2B1D1R1E1F

(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)


(所影响的行数为 1 行)

id xm pj dj
----------- -------------------- -------------------------------------------------- --------------------------------------------------
1 张三 BBDREF 2B1D1R1E1F
2 李四 TFDKD 1T1F2D1K
3 王五 FDKKDFM 2F2D2K1M
4 唐六 DKBVHKD 2D2K1B1V1H

(所影响的行数为 4 行)
pwlxj 2005-11-07
  • 打赏
  • 举报
回复
有没有别的办法??例如用while 循环的来检测pj 的内容,再修改DJ 字段的内容????
pwlxj 2005-11-07
  • 打赏
  • 举报
回复
就是这个 where 的条件 如何写?
因为组合太多,语句太多
有没有别的办法???
danisluo 2005-11-07
  • 打赏
  • 举报
回复
update tbname
set pi='新内容'
[where 条件]

22,206

社区成员

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

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