请问算法????????

baiyga 2006-07-13 05:26:13
你好,请求一算法,怎么样对公式进行排序.

最先计算的放在最前面.

id 公式名称 公式表达式 排序序号
1 a d+c
2 b 0.23
3 c b+2
4. d b*1.5
…..
经过算法计算后得到:
id 公式名称 公式表达式 排序序号
2 b 0.23 1
4. d b*1.5 2
3 c b+2 3
1 a d+c 4
……
请朋友能够帮忙写出代码
是先计算的放在最前面,因为我这是用的是动态公式.
按公式表达式排序,最先计算的放在前面
a=b+c
b=0.2
c=a+e
e=b
排序后
b=0.2
e=b
c=b+e
a=b+c
...全文
184 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiyga 2006-07-15
  • 打赏
  • 举报
回复
谢谢邹老大,循环的公式是不会出现的
fcuandy 2006-07-13
  • 打赏
  • 举报
回复
楼主给的结果是乘法在前.
正如我的第二个问题.
老大你的语句没错.但对于同级的,楼主没说怎么排.
zjcxc 元老 2006-07-13
  • 打赏
  • 举报
回复
-- 测试数据
CREATE TABLE tb(id int, 公式名称 varchar(10), 公式表达式 varchar(10), 排序号 int)
INSERT tb SELECT 1, 'a', 'd+c', NULL
UNION ALL SELECT 2, 'b', '0.23', NULL
UNION ALL SELECT 3, 'c', 'b+2', NULL
UNION ALL SELECT 4, 'd', 'b*1.5', NULL
GO

-- 处理排序号列
DECLARE @l int
SET @l = 1
UPDATE A SET
排序号 = @l
FROM tb A
WHERE NOT EXISTS(
SELECT * FROM tb
WHERE id <> A.id
AND PATINDEX('%' + 公式名称 + '%', A.公式表达式) > 0)
WHILE @@ROWCOUNT > 0
BEGIN
SET @l = @l + 1
UPDATE A SET
排序号 = @l
FROM tb A
WHERE 排序号 IS NULL
AND NOT EXISTS(
SELECT * FROM tb
WHERE 排序号 IS NULL
AND id <> A.id
AND PATINDEX('%' + 公式名称 + '%', A.公式表达式) > 0)
END
SELECT * FROM tb
ORDER BY 排序号
GO

DROP TABLE tb

-- 结果
id 公式名称 公式表达式 排序号
----------- ---------- ---------- -----------
2 b 0.23 1
3 c b+2 2
4 d b*1.5 2
1 a d+c 3

(4 行受影响)
fcuandy 2006-07-13
  • 打赏
  • 举报
回复
我觉得楼主这个排序的逻辑问题很多.
1,就像老大提的那个问题.
2,当几个级别相似时如何排

所以不能按无级分类排序那样.归到底还是觉得设计有问题
zjcxc 元老 2006-07-13
  • 打赏
  • 举报
回复
确保不会有产生循环的公式出现? 即这种是不会出现的?a=b+c, c=a+b

34,588

社区成员

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

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