十万火急:如何对字段内容排序

有你_才有梦想 2009-09-27 02:04:34
有张表是这样的A:
编号 内容
001 ACD
002 BA
003 DCB
004 CA

能写一条语句将 内容字段 排序吗,效果这样:
001 ACD
002 AB
003 BCD
004 AC

很急,大家帮帮忙啊
...全文
148 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiequan2 2009-09-27
  • 打赏
  • 举报
回复
/*编号         内容         新内容
---------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
001 ACD ACD
002 BA AB
004 CA AC
003 DCB BCD

(4 行受影响)

*/
xiequan2 2009-09-27
  • 打赏
  • 举报
回复
if object_id('tb')is not null drop table tb
go
CREATE TABLE tb(编号 varchar(10), 内容 varchar(10))
INSERT tb SELECT
'001' , 'ACD' UNION ALL SELECT
'002' , 'BA' UNION ALL SELECT
'003' , 'DCB' UNION ALL SELECT
'004' , 'CA'


;
with cte1 as
(
select * from
(select char(Ascii('A')+number) col from master..spt_values where type='p' and number<26) tmp
join tb
on charindex(col,内容)>0
)

select 编号 ,内容,新内容=(select ''+col from cte1 where 编号=c.编号 for xml path(''))
from cte1 c
group by 编号,内容
华夏小卒 2009-09-27
  • 打赏
  • 举报
回复


if object_id('tb')is not null drop table tb
go
CREATE TABLE tb(编号 varchar(10), 内容 varchar(10))
INSERT tb SELECT
'001' , 'ACD' UNION ALL SELECT
'002' , 'BA' UNION ALL SELECT
'003' , 'DCB' UNION ALL SELECT
'004' , 'CA'



if object_id('f_str')is not null drop function f_str
go

create function f_str(@id varchar(10))
returns varchar(100)
as
begin
declare @tc TABLE(编号 varchar(10), 内容 varchar(10))


declare @s varchar(400),@n int,@str varchar(10)
set @n=1
set @str=(select 内容 from tb where 编号=@id)
while @n<=len(@str)
begin
insert @tc select @id,substring(@str,@n,1)
set @n=@n+1
end

select @s=isnull(@s,'')+内容 from @tc where 编号=@id order by ascii(内容)

return @s
end
go



select 编号,内容=dbo.f_str(编号) from tb

编号 内容
---------- ----------------------------------------------------------------------------------------------------
001 ACD
002 AB
003 BCD
004 AC

(4 行受影响)

nzperfect 2009-09-27
  • 打赏
  • 举报
回复
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (编号 varchar(3),内容 varchar(3))
insert into #T
select '001','ACD' union all
select '002','BA' union all
select '003','DCB' union all
select '004','CA'



create function fn_sort(@str varchar(7000))
returns varchar(7000)
as
begin
declare @t table(col varchar(2))
declare @s varchar(7000)
while LEN(@str)>0
begin
insert into @t select left(@str,1)
set @str=stuff(@str,1,1,'')
end
select @s=isnull(@s+'','')+col from @t order by col
return @s
end

select 编号,dbo.fn_sort(内容) as 内容 from #T

/*
编号 内容
001 ACD
002 AB
003 BCD
004 AC
*/
  • 打赏
  • 举报
回复
厉害,我马上试试谢谢
liangCK 2009-09-27
  • 打赏
  • 举报
回复
-------------------------------------
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-09-27 14:10:01
-------------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (编号 varchar(3),内容 varchar(3))
INSERT INTO @T
SELECT '001','ACD' UNION ALL
SELECT '002','BA' UNION ALL
SELECT '003','DCB' UNION ALL
SELECT '004','CA'

--SQL查询如下:


SELECT *
FROM @T AS A
CROSS APPLY
( SELECT 新内容 = (SELECT v AS [text()]
FROM (SELECT SUBSTRING(A.内容,number,1) AS v
FROM master.dbo.spt_values
WHERE type = 'p' AND SUBSTRING(A.内容,number,1) <> '') AS T
ORDER BY v FOR XML PATH(''),TYPE).value('.','varchar(10)')) AS B

/*
编号 内容 新内容
---- ---- ----------
001 ACD ACD
002 BA AB
003 DCB BCD
004 CA AC

(4 行受影响)
*/
  • 打赏
  • 举报
回复
是要将第2个字段的值,按照顺序重新显示
luoyoumou1202 2009-09-27
  • 打赏
  • 举报
回复
--还是写个函数,最好的方法!
nalnait 2009-09-27
  • 打赏
  • 举报
回复
写个函数就可以了
zhousq00 2009-09-27
  • 打赏
  • 举报
回复
我也没看明白什么规则!
soft_wsx 2009-09-27
  • 打赏
  • 举报
回复
没看明白是什么规则!
老猫的TOM 2009-09-27
  • 打赏
  • 举报
回复
你这个可以利用asc码进行排序利用循环
luoyoumou1202 2009-09-27
  • 打赏
  • 举报
回复
--取子串CASE语句搞定
  • 打赏
  • 举报
回复
如何写啊,大家可以写出来吗
luoyoumou1202 2009-09-27
  • 打赏
  • 举报
回复
CASE语句搞定
  • 打赏
  • 举报
回复
怎么写啊,如果直接按ID排序是不行的 啊
soft_wsx 2009-09-27
  • 打赏
  • 举报
回复
按ID排不就得了!


内容排序有什么规则!
nzperfect 2009-09-27
  • 打赏
  • 举报
回复
写个函数,简单。

22,209

社区成员

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

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