一对多,返回一条统计数据

苛学加 2015-08-13 02:10:04
--时单位临表
declare @DW_A table
(
DWBM nvarchar(50),--单位编码
DWMC nvarchar(50) --单位名称
)
--时单位临表
declare @DW_B table
(
DWBM nvarchar(50),--单位编码
DWMC nvarchar(50) --单位名称
)
insert into @DW_A(DWBM,DWMC) values ('100','重庆市')
insert into @DW_A(DWBM,DWMC) values ('100100',' 渝中区')
insert into @DW_A(DWBM,DWMC) values ('100200',' 南岸区')
insert into @DW_A(DWBM,DWMC) values ('100200100','  南坪镇')
insert into @DW_A(DWBM,DWMC) values ('100','天津市')

--将排好序的单位导入
;with cte as
(
select DWBM,DWMC from @DW_A
)
insert into @DW_B(DWBM,DWMC)
select DWBM,DWMC from cte
ORDER BY DWBM

--单位的树形结构:
select DWBM,DWMC from @DW_B


--临时道路表
declare @DL table
(
DWBM nvarchar(50),--单位编码
DLMC nvarchar(50),--道路名称
DLCD int, --道路长度
WXQL int --桥梁数量
)
insert into @DL(DWBM,DLMC,DLCD,WXQL) values ('100200100','一路','1','2')
insert into @DL(DWBM,DLMC,DLCD,WXQL) values ('100200100','二路','2','3')
insert into @DL(DWBM,DLMC,DLCD,WXQL) values ('100200','大路','3','4')
insert into @DL(DWBM,DLMC,DLCD,WXQL) values ('100100','马路','4','5')

select DWBM,DLMC,DLCD,WXQL from @DL


--现在的需求是返回一张统计表:
declare @TJ table
(
DWBM nvarchar(50),--单位编码
DWMC nvarchar(50),--单位名称
DLCD int, --道路长度
WXQL int --桥梁数量
)
数据如下:
--单位 道路长度 桥梁数量
--重庆市 10 14
-- 渝中区 4 5
-- 南岸区 6 9
-- 南坪镇 3 4


--我想到的方法是通过游标遍历单位表@DW_B , 然后通过单位编码去查,但是效率太低。求其他的思路解决。
...全文
138 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
苛学加 2015-08-13
引用 1 楼 Tiger_Zhao 的回复:
INSERT INTO @TJ
    SELECT B.DWBM,
           B.DWMC,
           SUM(D.DLCD),
           SUM(D.WXQL)
      FROM @DW_B B
      JOIN @DL D
        ON D.DWBM LIKE B.DWBM+'%'
  GROUP BY B.DWBM,
           B.DWMC

SELECT * FROM @TJ ORDER BY DWBM

DWBM         DWMC                DLCD        WXQL
------------ ------------ ----------- -----------
100          天津市                10          14
100          重庆市                10          14
100100        渝中区               4           5
100200        南岸区               6           9
100200100      南坪镇             3           5
测试数据中编码100重复了!
谢谢,谢谢。问题解决了。编码100重复是我打错了,应该是200。
回复
Tiger_Zhao 2015-08-13
INSERT INTO @TJ
SELECT B.DWBM,
B.DWMC,
SUM(D.DLCD),
SUM(D.WXQL)
FROM @DW_B B
JOIN @DL D
ON D.DWBM LIKE B.DWBM+'%'
GROUP BY B.DWBM,
B.DWMC

SELECT * FROM @TJ ORDER BY DWBM


DWBM DWMC DLCD WXQL
------------ ------------ ----------- -----------
100 天津市 10 14
100 重庆市 10 14
100100  渝中区 4 5
100200  南岸区 6 9
100200100   南坪镇 3 5

测试数据中编码100重复了!
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-08-13 02:10
社区公告
暂无公告