求一个用SQL SERVER2000 查各级子节点的语句

2024-12-26 12:18:24
推荐回答(5个)
回答1:

胡锦涛强调:不断提高党的基层组织建设科学化水平
2010年06月22日 14:02:36 来源: 新华网

胡锦涛在中共中央政治局第二十一次集体学习时强调

充分认识加强党的基层组织建设重大意义

不断提高党的基层组织建设科学化水平

建党89周年前夕,胡锦涛代表党中央向奋斗在各条战线的广大基层党员、干部,向全体共产党员致以节日问候

新华社北京6月22日电 在中国共产党成立89周年前夕,中共中央政治局6月21日下午就加强党的基层组织建设问题进行第二十一次集体学习。中共中央总书记胡锦涛在主持学习时代表党中央,向奋斗在各条战线的广大基层党员、干部,向全体共产党员致以节日问候。他强调,要把继续解放思想、坚持改革开放、推动科学发展、促进社会和谐落到实处,朝着全面建设小康社会宏伟目标前进,就必须紧紧依靠各级党组织、全体党员紧密团结全国各族人民共同奋斗。只有党的基层组织都充分发挥战斗堡垒作用,党的基层干部都充分发挥骨干带头作用,全体党员都充分发挥先锋模范作用,才能保持党同人民群众的血肉联系,才能为推动党和人民事业发展不断凝聚强大力量。

国防大学军队建设与军队政治工作教研部吴杰明教授、中央组织部党建研究所高永中研究员就这个问题进行讲解,并谈了他们的意见和建议。

中共中央政治局各位同志认真听取了他们的讲解,并就有关问题进行了讨论。

胡锦涛在主持学习时发表了讲话。他指出,我们党是以民主集中制为原则建立起来的马克思主义政党,分布广泛、严密完善、富有活力的基层组织是党全部工作和战斗力的基础,是贯彻落实党的路线方针政策和各项工作任务的战斗堡垒。国际形势越是复杂多变,我国社会越是深刻变革,改革发展稳定任务越是艰巨繁重,我们越要做好抓基层打基础工作。

胡锦涛强调,加强党的基层组织建设,必须按照党的十七大和十七届三中、四中全会作出的部署,以邓小平理论和“三个代表”重要思想为指导,深入贯彻落实科学发展观,坚持围绕中心、服务大局、拓宽领域、强化功能,抓好组织体系、骨干队伍、活动载体、工作制度、场所阵地建设,着力扩大覆盖面、增强生机活力,着力解决存在的突出矛盾和问题,使党的基层组织充分发挥推动发展、服务群众、凝聚人心、促进和谐的作用,不断开创党的基层组织建设新局面。

胡锦涛就加强党的基层组织建设提出4点要求。一是要进一步健全党的基层组织体系,全面推进各领域党的基层组织建设,形成科学严密的组织架构,实现党组织和党的工作全社会覆盖,把人民群众紧密团结在党组织周围。二是要进一步推动基层党建工作创新,找准基层党建工作与中心任务的结合点,创新党的基层组织发挥作用的途径和方式,积极探索扩大党内基层民主的多种实现形式,不断增强基层党组织服务大局、推动科学发展、维护社会和谐稳定的能力。三是要进一步增强基层党员干部队伍活力,建立健全教育、管理、服务党员长效机制,形成新形势下党员经常受教育、永葆先进性的长效机制。四是要进一步构建城乡统筹的基层党建新格局,推进城乡基层党建工作双向开放、资源共享、优势互补、相互促进,发挥城市基层党建带动优势,加强对革命老区、民族地区、边疆地区、贫困地区基层党建工作的支持,推动城乡、区域基层党建工作协调发展。

胡锦涛强调,广大基层党员、干部长期奋斗在一线,遇到的矛盾和困难多、工作压力大,一定要真正重视、真情关怀、真心爱护他们。要健全党内激励、关怀、帮扶机制,从思想、工作、生活上加强对基层党员特别是老党员、生活困难党员的关怀帮助,让他们切实感受到组织的温暖。

胡锦涛指出,各级党委要坚持党要管党、从严治党,强化党委管党建、书记抓党建的责任,完善基层党建工作领导体制,加强分类指导、统筹协调、监督检查,深入调查研究,尊重党的基层组织和广大党员的首创精神,建设高素质基层党务工作者队伍,保障基层组织建设工作经费,确保加强和改进新形势下基层党建工作各项重大举措落到实处。当前,各级党组织要切实抓好深入开展创建先进基层党组织、争做优秀共产党员活动,在基层党组织和广大党员中营造学先进、赶先进、作贡献、当表率的良好风气。

回答2:

实现各级子节点零件数量的对应相乘这个很有难度,周末搞搞。

搞定了~不管你是SQL SERVER 还是其他,只要支持LEFT JOIN肯定可以

找到A1的所有子节点
SELECT
t2.PARTNAME AS LEVEL1, t1.QTY*t2.QTY AS QTY1, T2.CHILD_ID AS CHILD1,
t3.PARTNAME AS LEVEL2, t1.QTY*t2.QTY*t3.QTY AS QTY2, t3.CHILD_ID AS CHILD2,
t4.PARTNAME AS LEVEL3, t1.QTY*t2.QTY*t3.QTY*t4.QTY AS QTY3, t4.CHILD_ID AS CHILD3
FROM TREE t1
LEFT JOIN TREE t2 ON t1.child_id = t2.parent_id
LEFT JOIN TREE t3 ON t2.child_id = t3.parent_id
LEFT JOIN TREE t4 ON t3.child_id = t4.parent_id
WHERE t1.PARTNAME = 'AA'

BB 2 003 DD 6 005 EE 12 006
CC 4 004 NULL NULL NULL NULL NULL NULL+

方便写代码期间,把上面的SQL弄成视图VIEW
CREATE VIEW TREE_VIEW AS
SELECT
t2.PARTNAME AS LEVEL1, t1.QTY*t2.QTY AS QTY1, T2.CHILD_ID AS CHILD1,
t3.PARTNAME AS LEVEL2, t1.QTY*t2.QTY*t3.QTY AS QTY2, t3.CHILD_ID AS CHILD2,
t4.PARTNAME AS LEVEL3, t1.QTY*t2.QTY*t3.QTY*t4.QTY AS QTY3, t4.CHILD_ID AS CHILD3
FROM TREE t1
LEFT JOIN TREE t2 ON t1.child_id = t2.parent_id
LEFT JOIN TREE t3 ON t2.child_id = t3.parent_id
LEFT JOIN TREE t4 ON t3.child_id = t4.parent_id
WHERE t1.PARTNAME = 'AA'

搞定,记得用UNION ALL,而不是UNION哦

SELECT LEVEL1 AS PARTNAME, QTY1 AS QTY, CHILD1 AS CHILE_ID
FROM TREE_VIEW WHERE LEVEL1 IS NOT NULL
UNION ALL
SELECT LEVEL2 AS PARTNAME, QTY2 AS QTY, CHILD2 AS CHILE_ID
FROM TREE_VIEW WHERE LEVEL2 IS NOT NULL
UNION ALL
SELECT LEVEL3 AS PARTNAME, QTY3 AS QTY, CHILD3 AS CHILE_ID
FROM TREE_VIEW WHERE LEVEL2 IS NOT NULL

结果
PARTNAME QTY CHILD_D
BB 2 003
CC 4 004
DD 6 005
EE 12 006

要弄成一个SQL语句的话,只需要把上面的TREE_VIEW换成最开始的SELECT语句就可以了。

这个对于6级节点足够了,如果有更深级就加多一个LEFT JOIN就实现了。

回答3:

create table tmp
(
PARTNAME varchar(50),
QTY int,
CHILD_ID varchar(50)
)
GO
declare @name varchar(50)
set @name='AA'
insert into tmp
select distinct t2.PARTNAME, t1.QTY*t2.QTY,t2.CHILD_ID from tree t1,tree t2 where t1.CHILD_ID=t2.PARENT_ID and t1.PARTNAME=@name
while exists(select * from tmp t1,tree t2 where t1.CHILD_ID=t2.PARENT_ID and t2.PARTNAME not in(select PARTNAME from tmp))
begin
insert into tmp
select distinct t2.PARTNAME, t1.QTY*t2.QTY,t2.CHILD_ID from tmp t1,tree t2 where t1.CHILD_ID=t2.PARENT_ID and t2.PARTNAME not in(select PARTNAME from tmp)
end;
select * from tmp
drop table tmp

排序规则冲突,可能tmpdb的排序规则跟所用数据库德排序规则不一样,那就不用tmpdb的临时表了。

回答4:

--用2005的递归还是比较简单的,2000不支持
CREATE TABLE TREE(
PARTNAME VARCHAR(6),
QTY INT,
PARENT_ID VARCHAR(12),
CHILD_ID VARCHAR(12)
)
GO
INSERT INTO TREE VALUES('AA', 2 ,'001', '002')
INSERT INTO TREE VALUES('BB', 1 ,'002', '003')
INSERT INTO TREE VALUES('CC', 2 ,'002', '004')
INSERT INTO TREE VALUES('DD', 3 ,'003', '005')
INSERT INTO TREE VALUES('EE', 2 ,'005', '006')
GO
--SELECT * FROM TREE
GO
WITH CTE1 AS(
SELECT PARTNAME,QTY,PARENT_ID,CHILD_ID,1 AS LEVEL ,QTY AS PIVS FROM TREE WHERE PARENT_ID='001'
UNION ALL
SELECT A.PARTNAME,A.QTY,A.PARENT_ID,A.CHILD_ID,B.LEVEL+1,A.QTY*B.PIVS FROM TREE A INNER JOIN CTE1 B ON A.PARENT_ID=B.CHILD_ID
)
SELECT * FROM CTE1
/*
PARTNAME QTY PARENT_ID CHILD_ID LEVEL PIVS
-------- ----------- ------------ ------------ ----------- -----------
AA 2 001 002 1 2
BB 1 002 003 2 2
CC 2 002 004 2 4
DD 3 003 005 3 6
EE 2 005 006 4 12

(5 行受影响)
*/
加个2000的
/*
2000 临时表
*/
DECLARE @TPARENT VARCHAR(16)
DECLARE @TCHILD VARCHAR(16)
DECLARE @I INT
SELECT @TPARENT=PARENT_ID,@TCHILD=CHILD_ID FROM TREE WHERE PARENT_ID='001'
SELECT * INTO #TMP FROM TREE WHERE PARENT_ID=@TCHILD
SELECT * INTO #TMP2 FROM TREE WHERE 1=2
SELECT *,PIVS=QTY INTO #RES FROM TREE WHERE PARENT_ID='001'
SELECT @I=COUNT(*) FROM #TMP
WHILE @I>0
BEGIN
INSERT INTO #TMP2 SELECT * FROM #TMP
INSERT INTO #RES
SELECT A.*,A.QTY*B.PIVS FROM #TMP A INNER JOIN #RES B ON A.PARENT_ID=B.CHILD_ID
DELETE FROM #TMP
INSERT INTO #TMP SELECT * FROM TREE WHERE PARENT_ID IN(SELECT CHILD_ID FROM #TMP2)
DELETE FROM #TMP2
SELECT @I=COUNT(*) FROM #TMP
END
SELECT * FROM #RES ORDER BY PARTNAME
DROP TABLE #TMP
DROP TABLE #TMP2
DROP TABLE #RES
--
PARTNAME QTY PARENT_ID CHILD_ID PIVS
-------- ----------- ------------ ------------ -----------
AA 2 001 002 2
BB 1 002 003 2
CC 2 002 004 4
DD 3 003 005 6
EE 2 005 006 12

(5 行受影响)
楼主分给我 哈哈

回答5:

很干净看