关于sql查询数据很棘手的问题,劳烦各位大侠帮忙
现在有一个user表,字段有ID,ParentId
如图
还有一个UserMoneyLog表,字段有UserID,moneychange,IsOk
如图
User的parentID和ID是递归,现在想通过两个表结合,ID为940没有父,也就是最高。ID 944为940的子,ID945为944的子。以此类推944为最高时,他的下级与下下级的。
在图2中moneyChange总共的值,取绝对值并且Isok=0。子节点的总值大于50,那么为N_UserMoneyLog插入一条数据,子节点的子节点的总值大于100,那么为N_UserMoneyLog插入一条数据。
不知道我这样描述大家是否能看懂。在线等回复。
------解决方案--------------------美女 你到底要什么结果?你把你想要的结果贴出来吧!还有测试数据能不能不要贴图片啊
------解决方案--------------------CREATE TABLE t_tt(id INT,pId INT)
INSERT t_tt SELECT 940,0
UNION ALL SELECT 944,940
UNION ALL SELECT 945,0
UNION ALL SELECT 946,945
UNION ALL SELECT 947,946
UNION ALL SELECT 948,947
GO
CREATE FUNCTION F_GetNode(@Id INT,@PId INT)
RETURNS @t_L TABLE(Id INT,Pid INt,L INT)
AS
BEGIN
DECLARE @L int
SET @L=0
INSERT @t_L SELECT @Id,@PId,@L
WHILE @@ROWCOUNT>0
BEGIN
SET @L=@L+1
INSERT @t_L SELECT a.Id,a.Pid,@L
FROM t_tt a,@t_L b
WHERE a.Pid=b.Id AND b.L=@L-1
END
RETURN
END
GO
SELECT * from dbo.F_GetNode(945,0) WHERE L<=2
--RESULT
/*Id Pid L
----------- ----------- -----------
945 0 0
946 945 1
947 946 2
(所影响的行数为 3 行)
*/
------解决方案--------------------子节点的总值大于50,那么为N_UserMoneyLog插入一条数据,子节点的子节点的总值大于100,那么为N_UserMoneyLog插入一条数据。
这句话不懂?如果是插入,那插入什么样的数据啊,给个例子;如果是更新,要怎么更新?而且N_UserMoneyLog表什么意思也不懂。
------解决方案--------------------你的意思是不是定时更新UserMoneyLog的数据,如果存在某一父节点下的字节(sum(MoneyChange))>50或者abs(sum(MoneyChange))>100,就往UserMoneyLog表里插入一条父节点为userid的记录。
我有个问题:插入后不删除数据吗?否则下次更新的时候那不是要插入上次插入的、重复的记录?
还有你能不能把你数据Select出来 粘贴上来。
------解决方案-----------------