【新手初到】今天刚到一个公司上班,经理给了个sql语句查询的问题,要考验我 急!如果3天解决不出来就走人~~~~~~~~~~~~

pears2017 2007-08-08 10:04:57
数据是:
商品id 商品类别关系 显示顺序
0 0 0
1 0,1 0
2 0,2 2
3 0,1,3 0
4 0,2,4 0
5 0,2,5 1
6 0,6 1
大概就是这样的表了,现在要使查询出来的效果为
商品id 商品类别关系 显示顺序
0 0 0
1 0,1 0
3 0,1,3 0
6 0,6 1
2 0,2 2
4 0,2,4 0
5 0,2,5 1

用文字描述就是 象第一层0,1 0,2 0,6的要根据“显示顺序”排序,而且在他们之下的第二层象0,2,4 0,2,5也要排序,也就是同级“商品类别关系”排序,我是新手搞不出来,听说csdn高手多,特来请教了! 麻烦各位了,关系到工作的存留问题呀!
...全文
2134 122 打赏 收藏 转发到动态 举报
写回复
用AI写文章
122 条回复
切换为时间正序
请发表友善的回复…
发表回复
F15Eagle 2007-08-13
  • 打赏
  • 举报
回复
是不是感觉论坛让你失望了?
pears2017 2007-08-13
  • 打赏
  • 举报
回复
昨天晚上去喝酒,喝得醉了,梦里还想到这个排序,md!
pears2017 2007-08-13
  • 打赏
  • 举报
回复
已经辞了! 感觉有些过分的在注重一些东西,不合理 所以走了
  • 打赏
  • 举报
回复

zzfjfhwfnhti()

我是你的经理,你可以走人了!!
------------------------------------------

LZ命运如何?
caojialiang 2007-08-10
  • 打赏
  • 举报
回复
大家好:
关注微软新技术,silverlight VS flash 谁主沉浮?
想听听微软的专家是如何评说的吗?
想听听Microsoft MVP是如何理解的吗?
想知道就来参加“Silverlight中文社区夏日活动”的盛会吧!
来共享这免费的技术交流的盛宴!
大会简介地址:
http://silverlight.cn/forums/thread/1307.aspx
报名表地址:
http://myspace.silverlight.cn/onlinesignin/Default.aspx

请大家积极报名,由于名额有限,大会会根据报名信息以及先后顺序确认参会人员名单,请报名的朋友,随时关注网站,以及注意接听确认电话!
谢谢
Silverlight中文社区(Silverlight.cn)
WNASP 2007-08-10
  • 打赏
  • 举报
回复
今天已经是第几天了?进展如何了?
w275221545c 2007-08-10
  • 打赏
  • 举报
回复
给我的感觉就想当初我去面试给我的题差不多,那个题现在想来都头疼,最后找老师来帮忙解决了,他涉及了递归算法,而我却又不熟.....郁闷
yonghengdizhen 2007-08-10
  • 打赏
  • 举报
回复
纠正一下前面的语句,用字符的长度乘方产生字符位移,以对排序路径进行拼接的办法不适合于"商品类别关系"中使用不定长的字符(比如使用非对齐长度的数字 "1,0,2" "1,11,2")
因此可以通过查找分隔符(在这里是逗号)个数的方法进行位移拼接,修正后的语句如下

drop table test2
GO
create table test2 (商品id int, 商品类别关系 varchar(30), 显示顺序 int)
GO
insert into test2 values(0,'0',0)
insert into test2 values(1,'0,1',0)
insert into test2 values(2,'0,2',2)
insert into test2 values(3,'0,1,3',0)
insert into test2 values(4,'0,20',3)
insert into test2 values(4,'0,20,4',0)
insert into test2 values(5,'0,2,5',1)
insert into test2 values(7,'1',4)
insert into test2 values(6,'0,6',1)
insert into test2 values(8,'2',3)
insert into test2 values(9,'2,1',1)
insert into test2 values(10,'2,2',0)
insert into test2 values(11,'2,1,2',3)
insert into test2 values(12,'3',2)

SELECT *
FROM
(
SELECT *,REVERSE(REPLICATE('0',LEN(商品类别关系)-LEN(REPLACE(商品类别关系,',','')) + 1 -LEN(TempOrder)) + TempOrder) NewOrder
FROM
(
SELECT *,
CAST((SELECT SUM(显示顺序 * POWER(10,LEN(商品类别关系)-LEN(REPLACE(商品类别关系,',','')) ))
FROM test2 t
WHERE u.商品类别关系 LIKE t.商品类别关系 + '%') AS VARCHAR) AS TempOrder
FROM test2 u
) x
) y
ORDER BY NewOrder
lonehare 2007-08-10
  • 打赏
  • 举报
回复
我的思路是,对排序顺序进行加工!!!

0 0 0 -> 0*100
1 0,1 0 -> 0*100 + 0*10
2 0,2 2 -> 0*100 + 2*10
3 0,1,3 0 -> 0*100 + 0*10 + 0
4 0,2,4 0 -> 0*100 + 2*10 + 0
5 0,2,5 1 -> 0*100 + 2*10 + 1
6 0,6 1 -> 0*100 + 1*10

加工逻辑是:上一级的结果 + 本级的排序*进位数
如 0, 1 根据 0 的结果0*100 + 本级 0 * 位数10(只有1个,根据最高数 (2 - 1)*10)


再根据结果排序 :)
mkman 2007-08-10
  • 打赏
  • 举报
回复
是一个无限分类的表结构,第二个字段记录分类的所在路径,第三个字段是自定义排序ID
动易的系统分类结构也是这样
lxs5i5j 2007-08-10
  • 打赏
  • 举报
回复
其实这是一个很实际的问题,

先将大类按显示顺序选出来,再将大类的子类按路径排序选出来填在大类下,相当于嵌套
外层:
0 0 0
1 0,1 0
6 0,6 1
2 0,2 2

嵌套后:
0 0 0
1 0,1 0

3 0,1,3 0

6 0,6 1
2 0,2 2

4 0,2,4 0
5 0,2,5 1


yesdoing 2007-08-10
  • 打赏
  • 举报
回复

你经理太可爱了,太有创意了,可惜这个创意是没有价值的。

luomingchao 2007-08-10
  • 打赏
  • 举报
回复
这样的要求,也许公司挺不错的,你以后有发展前途了.也许工资也不错.你可得好好谢谢帮你的人哦
gimse7en 2007-08-10
  • 打赏
  • 举报
回复
越看越迷糊阿
pears2017 2007-08-10
  • 打赏
  • 举报
回复
我也是没办法, 现在大家总算知道我的痛苦了吧?
octverve 2007-08-10
  • 打赏
  • 举报
回复



      数据库的结构设计本原就有缺欠。怎么改都有些牵强。
jy02756519 2007-08-10
  • 打赏
  • 举报
回复
..不明白意思!
sun_Ke 2007-08-10
  • 打赏
  • 举报
回复
我看还是走人吧
ssj1985 2007-08-10
  • 打赏
  • 举报
回复
不知我题目理解有没错,如果没错的话,本质不就是树的深度优先遍历问题吗,根据显示顺序决定先扩展哪个节点
yonghengdizhen 2007-08-10
  • 打赏
  • 举报
回复
你看来是没有试过我最后提供的语句吧.
把它拷到查询分析器里运行一下,对不对一看就知道了,没你说的问题.
0 0 0 0 0
1 0,1 0 0 00
3 0,1,3 0 0 000
6 0,6 1 10 01
2 0,2 2 20 02
5 0,2,5 1 120 021
4 0,20 3 50 05
4 0,20,4 0 50 050
12 3 2 2 2
8 2 3 3 3
10 2,2 0 3 30
9 2,1 1 13 31
11 2,1,2 3 313 313
7 1 4 4 4
加载更多回复(102)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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