可以。 CREATE TABLE [TB] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ITEM] [int] NULL , [NOTE] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_TB] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] ) ON [PRIMARY] GO INSERT INTO TB (ITEM, NOTE) SELECT 3,'XX' INSERT INTO TB (ITEM, NOTE) SELECT 3,'XX' INSERT INTO TB (ITEM, NOTE) SELECT 4,'XX' INSERT INTO TB (ITEM, NOTE) SELECT 5,'XX' INSERT INTO TB (ITEM, NOTE) SELECT 5,'XX' INSERT INTO TB (ITEM, NOTE) SELECT 6,'XX'SELECT * FROM TB/*----------------------- 3 XX 3 XX 4 XX 5 XX 5 XX 6 XX */ SELECT ITEM=CASE WHEN ID=( SELECT MIN(ID) FROM TB WHERE ITEM=A.ITEM ) THEN RTRIM(ITEM) ELSE '' END, NOTE FROM TB AS A ORDER BY ID/* ITEM NOTE ------------ -------------------- 3 XX XX 4 XX 5 XX XX 6 XX SELECT ITEM, NOTE FROM ( SELECT RTRIM(ITEM) AS ITEM,NOTE,ITEM AS order1,0 AS order2 FROM TB UNION ALL SELECT '','',ITEM,1 FROM TB GROUP BY ITEM ) AS A ORDER BY order1,order2 3 XX 3 XX4 XX5 XX 5 XX6 XX
省份表:省份id ,省份 城市区县表:省份id,区县
--这样 ---------------------------------------------------------------- -- Author :fredrickhu(我是小F,向高手学习) -- Date :2009-12-02 14:06:13 -- Version: -- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) -- Nov 24 2008 13:01:59 -- Copyright (c) 1988-2005 Microsoft Corporation -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1) -- ---------------------------------------------------------------- --> 测试数据:[tb] if object_id('[tb]') is not null drop table [tb] go create table [tb]([省] varchar(6),[市] varchar(8)) insert [tb] select '北京市','昌平区' union all select '北京市','海淀区' union all select '北京市','朝阳区' union all select '河北省','保定市' union all select '河北省','石家庄市' --------------开始查询-------------------------- select case id when 1 then 省 else '' end as 省, 市 from ( select *,id=row_number()over(partition by 省 order by getdate()) from tb )t ----------------结果---------------------------- /*省 市 ------ -------- 北京市 昌平区 海淀区 朝阳区 河北省 保定市 石家庄市(5 行受影响) */
http://www.ahip.cn/tsg/zyly/xzqdm.htm GB2260中华人民共和国行政区划代码create table tb(code varchar(6) , name varchar(10)) insert into tb values('110000' ,'北京市') insert into tb values('110114' ,'昌平区') insert into tb values('110108' ,'海淀区') insert into tb values('110105' ,'朝阳区') insert into tb values('130000' ,'河北省') insert into tb values('130100' ,'石家庄市') insert into tb values('130600' ,'保定市') goselect m.name , n.name from (select code , name from tb where right(code,4) = '0000') m, (select code , name from tb where right(code,4) <> '0000') n where left(m.code,2) = left(n.code,2)drop table tb/* name name ---------- ---------- 北京市 昌平区 北京市 海淀区 北京市 朝阳区 河北省 石家庄市 河北省 保定市(所影响的行数为 5 行) */
create table tb(code varchar(6) , name varchar(10)) insert into tb values('110000' ,'北京市') insert into tb values('110114' ,'昌平区') insert into tb values('110108' ,'海淀区') insert into tb values('110105' ,'朝阳区') insert into tb values('130000' ,'河北省') insert into tb values('130100' ,'石家庄市') insert into tb values('130600' ,'保定市') goselect name1 = (case when code2 = (select min(code2) from ( select m.name name1, n.name name2, m.code code1 , n.code code2 from (select code , name from tb where right(code,4) = '0000') m, (select code , name from tb where right(code,4) <> '0000') n where left(m.code,2) = left(n.code,2) ) t2 where t2.code1 = t1.code1) then name1 else '' end) , name2 from ( select m.name name1, n.name name2, m.code code1 , n.code code2 from (select code , name from tb where right(code,4) = '0000') m, (select code , name from tb where right(code,4) <> '0000') n where left(m.code,2) = left(n.code,2) ) t1 order by t1.code1 , t1.code2drop table tb/* name1 name2 ---------- ---------- 北京市 朝阳区 海淀区 昌平区 河北省 石家庄市 保定市(所影响的行数为 5 行) */
借小F的数据用哈if object_id('[tb]') is not null drop table [tb] go create table [tb]([省] varchar(6),[市] varchar(8)) insert [tb] select '北京市','昌平区' union all select '北京市','海淀区' union all select '北京市','朝阳区' union all select '河北省','保定市' union all select '河北省','石家庄市'
select case when flag=0 then 省 else '' end,市 from (select *,flag=(select count(1) from TB where 省=t.省 and 市>t.市) from TB T)g order by 省,1 desc/* 市 ------ -------- 北京市 海淀区 昌平区 朝阳区 河北省 石家庄市 保定市(所影响的行数为 5 行)*/ drop table TB
CREATE TABLE [TB] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ITEM] [int] NULL ,
[NOTE] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_TB] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO TB (ITEM, NOTE) SELECT 3,'XX'
INSERT INTO TB (ITEM, NOTE) SELECT 3,'XX'
INSERT INTO TB (ITEM, NOTE) SELECT 4,'XX'
INSERT INTO TB (ITEM, NOTE) SELECT 5,'XX'
INSERT INTO TB (ITEM, NOTE) SELECT 5,'XX'
INSERT INTO TB (ITEM, NOTE) SELECT 6,'XX'SELECT * FROM TB/*-----------------------
3 XX
3 XX
4 XX
5 XX
5 XX
6 XX
*/
SELECT
ITEM=CASE WHEN ID=(
SELECT MIN(ID)
FROM TB
WHERE ITEM=A.ITEM
)
THEN RTRIM(ITEM) ELSE '' END,
NOTE
FROM TB AS A
ORDER BY ID/*
ITEM NOTE
------------ --------------------
3 XX
XX
4 XX
5 XX
XX
6 XX
SELECT
ITEM,
NOTE
FROM (
SELECT
RTRIM(ITEM) AS ITEM,NOTE,ITEM AS order1,0 AS order2
FROM TB
UNION ALL
SELECT '','',ITEM,1
FROM TB
GROUP BY ITEM
) AS A
ORDER BY order1,order2
3 XX
3 XX4 XX5 XX
5 XX6 XX
城市区县表:省份id,区县
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-12-02 14:06:13
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([省] varchar(6),[市] varchar(8))
insert [tb]
select '北京市','昌平区' union all
select '北京市','海淀区' union all
select '北京市','朝阳区' union all
select '河北省','保定市' union all
select '河北省','石家庄市'
--------------开始查询--------------------------
select
case id when 1 then 省 else '' end as 省, 市
from
(
select *,id=row_number()over(partition by 省 order by getdate()) from tb
)t
----------------结果----------------------------
/*省 市
------ --------
北京市 昌平区
海淀区
朝阳区
河北省 保定市
石家庄市(5 行受影响)
*/
GB2260中华人民共和国行政区划代码create table tb(code varchar(6) , name varchar(10))
insert into tb values('110000' ,'北京市')
insert into tb values('110114' ,'昌平区')
insert into tb values('110108' ,'海淀区')
insert into tb values('110105' ,'朝阳区')
insert into tb values('130000' ,'河北省')
insert into tb values('130100' ,'石家庄市')
insert into tb values('130600' ,'保定市')
goselect m.name , n.name from
(select code , name from tb where right(code,4) = '0000') m,
(select code , name from tb where right(code,4) <> '0000') n
where left(m.code,2) = left(n.code,2)drop table tb/*
name name
---------- ----------
北京市 昌平区
北京市 海淀区
北京市 朝阳区
河北省 石家庄市
河北省 保定市(所影响的行数为 5 行)
*/
insert into tb values('110000' ,'北京市')
insert into tb values('110114' ,'昌平区')
insert into tb values('110108' ,'海淀区')
insert into tb values('110105' ,'朝阳区')
insert into tb values('130000' ,'河北省')
insert into tb values('130100' ,'石家庄市')
insert into tb values('130600' ,'保定市')
goselect name1 = (case when code2 = (select min(code2) from
(
select m.name name1, n.name name2, m.code code1 , n.code code2 from
(select code , name from tb where right(code,4) = '0000') m,
(select code , name from tb where right(code,4) <> '0000') n
where left(m.code,2) = left(n.code,2)
) t2 where t2.code1 = t1.code1) then name1 else '' end)
, name2
from
(
select m.name name1, n.name name2, m.code code1 , n.code code2 from
(select code , name from tb where right(code,4) = '0000') m,
(select code , name from tb where right(code,4) <> '0000') n
where left(m.code,2) = left(n.code,2)
) t1
order by t1.code1 , t1.code2drop table tb/*
name1 name2
---------- ----------
北京市 朝阳区
海淀区
昌平区
河北省 石家庄市
保定市(所影响的行数为 5 行)
*/
go
create table [tb]([省] varchar(6),[市] varchar(8))
insert [tb]
select '北京市','昌平区' union all
select '北京市','海淀区' union all
select '北京市','朝阳区' union all
select '河北省','保定市' union all
select '河北省','石家庄市'
select case when flag=0 then 省 else '' end,市
from (select *,flag=(select count(1) from TB where 省=t.省 and 市>t.市) from TB T)g
order by 省,1 desc/*
市
------ --------
北京市 海淀区
昌平区
朝阳区
河北省 石家庄市
保定市(所影响的行数为 5 行)*/
drop table TB
ID 地域 流量
1 北京市 15
2 上海市 12
3 石家庄市 8
4 保定市 10
5 沈阳市 11
6 大连市 13
7 天津市 9父子关系表
ID 地域 FatherID
1 北京市 1
2 上海市 2
3 天津 3
4 河北省 4
5 石家庄市 4
6 保定市 4
7 辽宁省 7
8 沈阳市 7
9 大连市 7
想要得到的结果:地域 详细 流量
北京市 15
天津市 9
河北省 保定市 10
石家庄市 8
辽宁省 沈阳市 11
大连市 13或是这样的也行地域 详细 流量
北京市 北京市 15
天津市 天津市 9
河北省 保定市 10
河北省 石家庄市 8
辽宁省 沈阳市 11
辽宁省 大连市 13
第二个表是后来新建的,当时页面没这么显示(不合适的话,可以改动第二个表)
参考:/*
标题:查询指定节点及其所有子节点的函数
作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开)
时间:2009-10-20
地点:陕西西安
地址:http://topic.csdn.net/u/20091020/18/a667c3dd-07e4-414d-9200-06c35d3d31a9.html
*/
ID parentid(下级级ID) 名称 数量
1 0 名称1 1
2 1 名称2 1
3 1 名称3 1
4 2 名称4 1
5 2 名称5 1
6 3 名称6 1
7 0 名称7 1
8 7 名称8 1
9 7 名称9 1 合计 6(名称1 以下所有节点 合计数量)
名称1 1
合计 3(名称2以下有节点)
名称2 1
名称4 1
名称5 1
合计 2
名称3 1
名称6 1 create table tb(ID int,parentid int, name varchar(10) ,cnt int)
insert into tb values(1 , 0 , '名称1' , 1)
insert into tb values(2 , 1 , '名称2' , 1)
insert into tb values(3 , 1 , '名称3' , 1)
insert into tb values(4 , 2 , '名称4' , 1)
insert into tb values(5 , 2 , '名称5' , 1)
insert into tb values(6 , 3 , '名称6' , 1)
insert into tb values(7 , 0 , '名称7' , 1)
insert into tb values(8 , 7 , '名称8' , 1)
insert into tb values(9 , 7 , '名称9' , 1)
go
--创建临时表
create table tmp (name varchar(10) ,cnt int)
go
--创建查询指定节点及其所有子节点的函数
create function f_cid(@ID int) returns @t_level table(id int , level int)
as
begin
declare @level int
set @level = 1
insert into @t_level select @id , @level
while @@ROWCOUNT > 0
begin
set @level = @level + 1
insert into @t_level select a.id , @level
from tb a , @t_Level b
where a.parentid = b.id and b.level = @level - 1
end
return
end
go--创建存储过程并将数据插入临时表
create proc my_proc
as
begin
declare @id as int
declare @cnt as int
declare @name as varchar(10)
set @id = 0
while exists(select 1 from tb where id > @id)
begin
set @id = (select min(id) from tb where id > @id)
set @name = (select name from tb where id = @id)
set @cnt = (select sum(cnt) from (select a.* from tb a , f_cid(@id) b where a.id = b.id ) t)
insert into tmp select @name , @cnt
end
end
go
exec my_procselect * from tmpdrop table tb , tmp
drop function f_cid
drop proc my_proc/*
name cnt
---------- -----------
名称1 6
名称2 3
名称3 2
名称4 1
名称5 1
名称6 1
名称7 3
名称8 1
名称9 1(所影响的行数为 9 行)*/
WHERE A.ID=B.ID AND B.ID=C.FATHERID