高难度,利用SQL语句或自定义函数:返回一串字符串(200)

  • 主题发起人 baobao2601
  • 开始时间
B

baobao2601

Unregistered / Unconfirmed
GUEST, unregistred user!
求一条SQL语句或函数:返回一串字符串我有一个表@bbbidd A B C1 ① 659 后2 ① 659 前3 ② 659 后4 ② 659 前5 ③ 742 前6 ③ 890 后7 ④ 635 后8 ④ 742 前9 ⑤ 659 后10 ⑤ 659 前11 ⑥ 659 后12 ⑥ 659 前13 ⑦ 741 前14 ⑦ 882 后15 ⑧ 659 前16 ⑧ 777 后17 ⑨ 659 后18 ⑨ 659 前19 ⑩ 999 后20 ⑩ 999 前想要结果得一串字符串,注意:只要一串字符串 如下:①②⑤⑥⑨前后 659 ③④前 742 ③后 890 ④后 635 ⑧前 659 ⑧后 777 ⑩前后 999尽量把数值一样,的数据归在一起建表测试的SQL语句如下:DECLARE @bbb TABLE (idd int identity(1,1),a VARCHAR(10),b INT,c varchar(10))INSERT @bbb(A,B,C)SELECT '①',659,'前' UNIONSELECT '②',659,'前' UNIONSELECT '③',742,'前' UNIONSELECT '④',742,'前' UNIONSELECT '⑤',659,'前' UNIONSELECT '⑥',659,'前' UNIONSELECT '⑦',741,'前' UNIONSELECT '⑧',659,'前' UNIONSELECT '⑨',659,'前' UNIONSELECT '⑩',999,'前' UNIONSELECT '①',659,'后' UNIONSELECT '②',659,'后' UNIONSELECT '③',890,'后' UNIONSELECT '④',635,'后' UNIONSELECT '⑤',659,'后' UNIONSELECT '⑥',659,'后' UNIONSELECT '⑦',882,'后' UNIONSELECT '⑧',777,'后' UNIONSELECT '⑨',659,'后' UNIONSELECT '⑩',999,'后' 有点难度,搞了半天,速度和结果都不是自己想要的,请大家帮帮忙看看,测试测试,谢谢!分不够可以再加!
 
你这是什么规律阿
 
根据表中的内容,写SQL语句或SQL函数得到一下字符串①②⑤⑥⑨前后 659 ③④前 742 ③后 890 ④后 635 ⑧前 659 ⑧后 777 ⑩前后 999
 
看了半天,终于理解了LZ要求。①②⑤⑥⑨前后 659 ::数据库中,①②⑤⑥⑨每个字符都有2条记录,且C的值分别是前和后。此外,LZ是否还缺少关于741,882的数据?
 
已替你解决,快给分,哈哈
 
Create view v_xzn asSelect b, a, max(C)C1, min(C) C2, Count(*) C3from @bbbgroup by b,a----------------------Create FUNCTION [DBO].[F_GetStr] (@Num IntEGER, @C1 varchar(2), @C2 varCHAR(2) ) RETURNS Varchar(20) AS BEGIN Declare @return varchar(20); Declare @A VarChar(2); set @return=''; Declare Cur_Item Cursor For Select a from v_xzn where b=@num and C1=@C1 AND C2=@C2; Open Cur_Item; Fetch Next From Cur_Item into @a; While @@FETCH_STATUS = 0 Begin Set @return = @return+@a; Fetch Next From Cur_Item into @a; End; Close Cur_Item; Deallocate Cur_Item; return @return;END--------------------Select DBO.F_GetStr(B,C1,C2) + (Case when C1=C2 then C1 ELSE C1+C2 END) XXFrom(Select B, C1,C2 from v_xzn group by B,C1,C2 )AOrder by 1-----------------------楼主再通过某种方式,把最后一个SQL中的记录合并,就是你所需要的结果
 
znxia 兄弟,结果得出不对啊
 
嗯,发帖后看到有人说解决了,我就没多考虑了,把最后一个sql修改一下:Select XXFrom (Select DBO.F_GetStr(B,C1,C2) + (Case when C1=C2 then C1 ELSE C1+C2 END)+Convert(char,B) XX ,B From (Select B, C1,C2 from v_xzn group by B,C1,C2 )A ) BBOrder by SubString(XX,1,1), B, SubString(XX,2,1) Desc显示结果就是:①②⑤⑥⑨前后659 ③④前742 ③后890 ④后635 ⑦前741 --不想显示的? ⑦后882 --不想显示的?⑧前659 ⑧后777 ⑩前后999 --------有了这个结果,你再通过一个函数,或者通过循环,把它横向过来,应该没问题吧?
 
又是一个不接贴的。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
772
import
I
顶部