这个是表的结构 给了些数据 我怕我说不明白
------------------------------
AC_NO VH_DB_AMT
------------------------------
5112214 100.00
5112261 120.00
5112268 100.005112311 100.00
5112312 100.00
5112321 1200.00
5112322 300.00
511232y 200.00
-------------------------------
这个是另一张表的结构
---------------------------
AC_NO AC_NAME
---------------------------
5112 服務成本51122 服務費用
511221 水電費
5112214 工作場所水費 511226 保險費
5112261 一般房屋保險費
5112268 責任保險費 51123 材料及用品費511231 使用材料費
5112311 原料
5112312 物料511232 用品消耗
5112321 辦公(事務)用品
5112322 報章什誌
511232y 其他
我想要得到的结果是
-----------------------------
2服務成本 2120.00
22服務費用 320.00
221水電費 100.00
2214工作場所水費 100.00
226保險費 220.00
2261一般房屋保險費 120.00
2268責任保險費 100.00
23材料及用品費 1900.00
231使用材料費 200.00
2311原料 100.00
2312物料 100.00
232用品消耗 1700.00
2321辦公(事務)用品 1200.00
2322報章什誌 300.00
232y其他 200.00
------------------------------
AC_NO VH_DB_AMT
------------------------------
5112214 100.00
5112261 120.00
5112268 100.005112311 100.00
5112312 100.00
5112321 1200.00
5112322 300.00
511232y 200.00
-------------------------------
这个是另一张表的结构
---------------------------
AC_NO AC_NAME
---------------------------
5112 服務成本51122 服務費用
511221 水電費
5112214 工作場所水費 511226 保險費
5112261 一般房屋保險費
5112268 責任保險費 51123 材料及用品費511231 使用材料費
5112311 原料
5112312 物料511232 用品消耗
5112321 辦公(事務)用品
5112322 報章什誌
511232y 其他
我想要得到的结果是
-----------------------------
2服務成本 2120.00
22服務費用 320.00
221水電費 100.00
2214工作場所水費 100.00
226保險費 220.00
2261一般房屋保險費 120.00
2268責任保險費 100.00
23材料及用品費 1900.00
231使用材料費 200.00
2311原料 100.00
2312物料 100.00
232用品消耗 1700.00
2321辦公(事務)用品 1200.00
2322報章什誌 300.00
232y其他 200.00
---------------------------------------------------------------------------- Author : htl258(Tony)-- Date : 2010-04-23 02:37:28-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) -- Jul 9 2008 14:43:34 -- Copyright (c) 1988-2008 Microsoft Corporation-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)-- Subject: BOM按节点排序应用实例-------------------------------------------------------------------------- --实例1:--> 生成测试数据表:tb IF NOT OBJECT_ID('[tb]') IS NULL DROP TABLE [tb]GOCREATE TABLE [tb]([id] INT,[code] NVARCHAR(10),[pid] INT,[name] NVARCHAR(10))INSERT [tb]SELECT 1,'01',0,N'服装' UNION ALLSELECT 2,'01',1,N'男装' UNION ALLSELECT 3,'01',2,N'西装' UNION ALLSELECT 4,'01',3,N'全毛' UNION ALLSELECT 5,'02',3,N'化纤' UNION ALLSELECT 6,'02',2,N'休闲装' UNION ALLSELECT 7,'02',1,N'女装' UNION ALLSELECT 8,'01',7,N'套装' UNION ALLSELECT 9,'02',7,N'职业装' UNION ALLSELECT 10,'03',7,N'休闲装' UNION ALLSELECT 11,'04',7,N'西装' UNION ALLSELECT 12,'01',11,N'全毛' UNION ALLSELECT 13,'02',11,N'化纤' UNION ALLSELECT 14,'05',7,N'休闲装'GO--SELECT * FROM [tb] -->SQL查询如下: ;WITH T AS( SELECT CAST(CODE AS VARCHAR(20)) AS CODE,*, CAST(ID AS VARBINARY(MAX)) AS px FROM tb AS A WHERE NOT EXISTS(SELECT * FROM tb WHERE id=A.pid) UNION ALL SELECT CAST(B.CODE+A.CODE AS VARCHAR(20)),A.*, CAST(B.px+CAST(A.ID AS VARBINARY) AS VARBINARY(MAX)) FROM tb AS A JOIN T AS B ON A.pid=B.id)SELECT Code,Name FROM T ORDER BY px/*Code Name-------------------- ----------01 服装0101 男装010101 西装01010101 全毛01010102 化纤010102 休闲装0102 女装010201 套装010202 职业装010203 休闲装010204 西装01020401 全毛01020402 化纤010205 休闲装 (14 行受影响)*/ --实例2:--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([id] INT,[parentid] INT,[categoryname] NVARCHAR(10))
INSERT [tb]
SELECT 1,0,'test1' UNION ALL
SELECT 2,0,'test2' UNION ALL
SELECT 3,1,'test1.1' UNION ALL
SELECT 4,2,'test2.1' UNION ALL
SELECT 5,3,'test1.1.1' UNION ALL
SELECT 6,1,'test1.2'
GO
--SELECT * FROM [tb]-->SQL查询如下:
;WITH T AS
(
SELECT *,CAST(ID AS VARBINARY(MAX)) AS px
FROM tb AS A
WHERE NOT EXISTS(SELECT * FROM tb WHERE id=A.[parentid])
UNION ALL
SELECT A.*,CAST(B.px+CAST(A.ID AS VARBINARY) AS VARBINARY(MAX))
FROM tb AS A
JOIN T AS B
ON A.[parentid]=B.id
)
SELECT [id],[parentid],[categoryname] FROM T
ORDER BY px
/*
id parentid categoryname
----------- ----------- ------------
1 0 test1
3 1 test1.1
5 3 test1.1.1
6 1 test1.2
2 0 test2
4 2 test2.1(6 行受影响)
*/本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/04/23/5518166.aspx
select b.AC_NO+b.AC_Name,sum(a.VH_DB_AMT) from 前表 a inner join 后表 b on left(a.AC_NO,len(B.AC_NO))=b.ac_no
group by b.AC_NO+b.AC_Name
IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1
IF OBJECT_ID('T2') IS NOT NULL DROP TABLE T2
GO
CREATE TABLE T1(
AC_NO VARCHAR(50)
,VH_DB_AMT NUMERIC(19,2)
)
GO
INSERT INTO T1
SELECT '5112214',100.00
UNION ALL SELECT '5112261',120.00
UNION ALL SELECT '5112268',100.00
UNION ALL SELECT '5112311',100.00
UNION ALL SELECT '5112312',100.00
UNION ALL SELECT '5112321',1200.00
UNION ALL SELECT '5112322',300.00
UNION ALL SELECT '511232y',200.00
GO
CREATE TABLE T2(
AC_NO VARCHAR(50)
,AC_NAME VARCHAR(100)
)
GO
INSERT INTO T2
SELECT '5112','服務成本'
UNION ALL SELECT '51122','服務費用'
UNION ALL SELECT '511221','水電費'
UNION ALL SELECT '5112214','工作場所水費'
UNION ALL SELECT '511226','保險費'
UNION ALL SELECT '5112261','一般房屋保險費'
UNION ALL SELECT '5112268','責任保險費'
UNION ALL SELECT '51123','材料及用品費'
UNION ALL SELECT '511231','使用材料費'
UNION ALL SELECT '5112311','原料'
UNION ALL SELECT '5112312','物料'
UNION ALL SELECT '511232','用品消耗'
UNION ALL SELECT '5112321','辦公(事務)用品'
UNION ALL SELECT '5112322','報章什誌'
UNION ALL SELECT '511232y','其他'
GO
;WITH MU AS (
SELECT 1 AS LEVEL,AC_NO,AC_NAME,CONVERT(VARCHAR(50),NULL) AS FNO
FROM T2 T21
WHERE NOT EXISTS(
SELECT 1 FROM T2 T22 WHERE T22.AC_NO<>T21.AC_NO AND T21.AC_NO LIKE T22.AC_NO+'%'
)
UNION ALL
SELECT LEVEL+1,T2.AC_NO,T2.AC_NAME,MU.AC_NO
FROM T2
INNER JOIN MU ON T2.AC_NO LIKE MU.AC_NO+'_'
)
SELECT
CONVERT(VARCHAR(100),(LEFT(REPLICATE(' ',LEVEL-1)+STUFF(AC_NO,1,3,'')+AC_NAME+REPLICATE(' ',100),100)))
+LTRIM((SELECT SUM(VH_DB_AMT) FROM T1 WHERE T1.AC_NO LIKE MU.AC_NO+'%') )
FROM MU
ORDER BY AC_NO,LEVEL
/*
2服務成本 2220.00
22服務費用 320.00
221水電費 100.00
2214工作場所水費 100.00
226保險費 220.00
2261一般房屋保險費 120.00
2268責任保險費 100.00
23材料及用品費 1900.00
231使用材料費 200.00
2311原料 100.00
2312物料 100.00
232用品消耗 1700.00
2321辦公(事務)用品 1200.00
2322報章什誌 300.00
232y其他 200.00
*/