日期:2014-05-17  浏览次数:20350 次

关于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出来 粘贴上来。
------解决方案-----------------