http://topic.csdn.net/u/20111117/17/770e1311-878b-41d5-ac33-1afc2ed4682f.html?47858
http://topic.csdn.net/u/20111117/17/2bc91e18-6316-4927-ade1-86431056c76f.html
SQL表连接。然后自动生成序号。序号比较特殊。有层级关系。不同层级序号显示的不一样。
http://topic.csdn.net/u/20111117/17/2bc91e18-6316-4927-ade1-86431056c76f.html
SQL表连接。然后自动生成序号。序号比较特殊。有层级关系。不同层级序号显示的不一样。
解决方案 »
- 求一条SQL语句
- 一个字符串匹配经常遇到的SQL逻辑问题!经常遇到!
- 怎样自动把一台sql2000的数据备份到另一台sql2000?
- 怎么彻底删除数据库信息啊?
- 我的数据库表中有八百万条记录,为什么用asp查询起来速度奇慢,怎么办呀,急!!!
- 做了一个关于操作金蝶数据小程序,却没法用,请高手指点一下。急用,谢谢了。
- 请问网上那里有SQL SERVER2000的安装程序下载????
- SQL Server 2005 中如何做全文检索
- 送100分,解释一条语句!!!
- 请问如何把orcale中的数据导入到sql2000中.
- 跨月的时段如何拆分
- raid0 的拷贝大文件时提示磁盘已满,但事实上空间还很大
if not object_id(N'Category') is null
drop table Category
Go
Create table Category([父编号] nvarchar(50),[编号] nvarchar(50),[名称] nvarchar(50))
Insert Category
select N'0',N'001',N'数码' union all
select N'0',N'002',N'家居' union all
select N'0',N'003',N'配饰' union all
select N'001',N'001001',N'手机' union all
select N'001',N'001002',N'本本' union all
select N'001',N'001003',N'小家电' union all
select N'001',N'001004',N'相机' union all
select N'001002',N'001002001',N'苹果' union all
select N'001003',N'001003001',N'厨房' union all
select N'001003',N'001003002',N'影音' union all
select N'001003',N'001003003',N'电风扇' union all
select N'001003',N'001003004',N'吸尘器' union all
select N'002',N'002001',N'建材' union all
select N'002',N'002002',N'日用' union all
select N'002001',N'002001001',N'卫浴' union all
select N'002001',N'002001002',N'灯饰' union all
select N'002002',N'002002001',N'婚庆' union all
select N'003',N'003001',N'箱包' union all
select N'003',N'003002',N'珠宝' union all
select N'003001',N'003001001',N'女包' union all
select N'003001',N'003001002',N'男包' union all
select N'003001',N'003001003',N'单肩包' union all
select N'003001001',N'003001001001',N'手提女包' union all
select N'003001001',N'003001001002',N'单肩女包'
Go
if not object_id(N'Merchandise') is null
drop table Merchandise
Go
Create table Merchandise([分类编号] nvarchar(50),[名称] nvarchar(50),[个数] int,[价格] decimal(18,2))
Insert Merchandise
select N'001001',N'Nokia',1,2000.00 union all
select N'001001',N'三星',2,3000.00 union all
select N'001002001',N'白色苹果',1,4000.00 union all
select N'003001001001',N'名牌女包',1,20000.00 union all
select N'003001001001',N'普通女包',1,300.00 union all
select N'003001001001',N'贵族女包',1,100000.00 union all
select N'003001002',N'黑色男包',2,300.00 union all
select N'003001002',N'棕色男包',1,170.00go
if not object_id(N'NumType') is null
drop table NumType
Go
Create table NumType(ID INT IDENTITY,[Lev] int,[num] int,[Name] nvarchar(10))
Insert NumType
select 1,1,N'一' union all
select 1,2,N'二' union all
select 1,3,N'三' union all
select 2,1,N'(一)' union all
select 2,2,N'(二)' union all
select 2,3,N'(三)' union all
select 3,1,N'1' union all
select 3,2,N'2' union all
select 3,3,N'3' union all
select 4,1,N'(1)' union all
select 4,2,N'(2)' union all
select 4,3,N'(3)' union all
select 5,1,N'①' union all
select 5,2,N'②' union all
select 5,3,N'③'
Go
/**/
select b.name,a.编号,a.名称,a.个数,a.价格 from(
select row_number()over(partition by 父编号 order by 编号)rn,* from(
select a.父编号,a.编号,a.名称,sum(b.个数)个数,sum(b.个数*b.价格)价格
from Category a inner join Merchandise b on charindex(a.编号,b.分类编号)=1
group by a.父编号,a.编号,a.名称
union all
select 分类编号,* from Merchandise
)t)a inner join NumType b on b.num=a.rn and b.lev=(len(a.父编号)+1)/2
order by a.编号,a.rn
/*
name 编号 名称 个数 价格
---------- -------------------------------------------------- -------------------------------------------------- ----------- ---------------------------------------
一 001 数码 4 12000.00
(一) 001001 手机 3 8000.00
1 001001 Nokia 1 2000.00
2 001001 三星 2 3000.00
(二) 001002 本本 1 4000.00
1 001002001 苹果 1 4000.00
① 001002001 白色苹果 1 4000.00
二 003 配饰 6 121070.00
(一) 003001 箱包 6 121070.00
1 003001001 女包 3 120300.00
① 003001001001 手提女包 3 120300.00
① 003001002 黑色男包 2 300.00
② 003001002 棕色男包 1 170.00
2 003001002 男包 3 770.00(14 行受影响)*/
drop table Category
Go
Create table Category([父编号] nvarchar(50),[编号] nvarchar(50),[名称] nvarchar(50))
Insert Category
select N'0',N'001',N'数码' union all
select N'0',N'002',N'家居' union all
select N'0',N'003',N'配饰' union all
select N'001',N'001001',N'手机' union all
select N'001',N'001002',N'本本' union all
select N'001',N'001003',N'小家电' union all
select N'001',N'001004',N'相机' union all
select N'001002',N'001002001',N'苹果' union all
select N'001003',N'001003001',N'厨房' union all
select N'001003',N'001003002',N'影音' union all
select N'001003',N'001003003',N'电风扇' union all
select N'001003',N'001003004',N'吸尘器' union all
select N'002',N'002001',N'建材' union all
select N'002',N'002002',N'日用' union all
select N'002001',N'002001001',N'卫浴' union all
select N'002001',N'002001002',N'灯饰' union all
select N'002002',N'002002001',N'婚庆' union all
select N'003',N'003001',N'箱包' union all
select N'003',N'003002',N'珠宝' union all
select N'003001',N'003001001',N'女包' union all
select N'003001',N'003001002',N'男包' union all
select N'003001',N'003001003',N'单肩包' union all
select N'003001001',N'003001001001',N'手提女包' union all
select N'003001001',N'003001001002',N'单肩女包'
Go
if not object_id(N'Merchandise') is null
drop table Merchandise
Go
Create table Merchandise([分类编号] nvarchar(50),[名称] nvarchar(50),[个数] int,[价格] decimal(18,2))
Insert Merchandise
select N'001001',N'Nokia',1,2000.00 union all
select N'001001',N'三星',2,3000.00 union all
select N'001002001',N'白色苹果',1,4000.00 union all
select N'003001001001',N'名牌女包',1,20000.00 union all
select N'003001001001',N'普通女包',1,300.00 union all
select N'003001001001',N'贵族女包',1,100000.00 union all
select N'003001002',N'黑色男包',2,300.00 union all
select N'003001002',N'棕色男包',1,170.00go
if not object_id(N'NumType') is null
drop table NumType
Go
Create table NumType(ID INT IDENTITY,[Lev] int,[num] int,[Name] nvarchar(10))
Insert NumType
select 1,1,N'一' union all
select 1,2,N'二' union all
select 1,3,N'三' union all
select 2,1,N'(一)' union all
select 2,2,N'(二)' union all
select 2,3,N'(三)' union all
select 3,1,N'1' union all
select 3,2,N'2' union all
select 3,3,N'3' union all
select 4,1,N'(1)' union all
select 4,2,N'(2)' union all
select 4,3,N'(3)' union all
select 5,1,N'①' union all
select 5,2,N'②' union all
select 5,3,N'③'
Go
/**/
select b.name,a.编号,a.名称,a.个数,a.价格 from(
select row_number()over(partition by 父编号 order by 编号)rn,* from(
select a.父编号,a.编号,a.名称,sum(b.个数)个数,sum(b.个数*b.价格)价格
from Category a inner join Merchandise b on charindex(a.编号,b.分类编号)=1
group by a.父编号,a.编号,a.名称
union all
select 分类编号,* from Merchandise
)t)a inner join NumType b on b.num=a.rn and b.lev=len(a.父编号)/3+1
order by a.编号,a.rn
/*
name 编号 名称 个数 价格
---------- -------------------------------------------------- -------------------------------------------------- ----------- ---------------------------------------
一 001 数码 4 12000.00
(一) 001001 手机 3 8000.00
1 001001 Nokia 1 2000.00
2 001001 三星 2 3000.00
(二) 001002 本本 1 4000.00
1 001002001 苹果 1 4000.00
(1) 001002001 白色苹果 1 4000.00
二 003 配饰 6 121070.00
(一) 003001 箱包 6 121070.00
1 003001001 女包 3 120300.00
(1) 003001001001 手提女包 3 120300.00
① 003001001001 名牌女包 1 20000.00
② 003001001001 普通女包 1 300.00
③ 003001001001 贵族女包 1 100000.00
(1) 003001002 黑色男包 2 300.00
(2) 003001002 棕色男包 1 170.00
2 003001002 男包 3 770.00(17 行受影响)*/
go
--> -->
if not object_id(N'Category') is null
drop table Category
Go
Create table Category([父编号] nvarchar(50),[编号] nvarchar(50),[名称] nvarchar(50))
Insert Category
select N'0',N'001',N'数码' union all
select N'0',N'002',N'家居' union all
select N'0',N'003',N'配饰' union all
select N'001',N'001001',N'手机' union all
select N'001',N'001002',N'本本' union all
select N'001',N'001003',N'小家电' union all
select N'001',N'001004',N'相机' union all
select N'001002',N'001002001',N'苹果' union all
select N'001003',N'001003001',N'厨房' union all
select N'001003',N'001003002',N'影音' union all
select N'001003',N'001003003',N'电风扇' union all
select N'001003',N'001003004',N'吸尘器' union all
select N'002',N'002001',N'建材' union all
select N'002',N'002002',N'日用' union all
select N'002001',N'002001001',N'卫浴' union all
select N'002001',N'002001002',N'灯饰' union all
select N'002002',N'002002001',N'婚庆' union all
select N'003',N'003001',N'箱包' union all
select N'003',N'003002',N'珠宝' union all
select N'003001',N'003001001',N'女包' union all
select N'003001',N'003001002',N'男包' union all
select N'003001',N'003001003',N'单肩包' union all
select N'003001001',N'003001001001',N'手提女包' union all
select N'003001001',N'003001001002',N'单肩女包'
Go
if not object_id(N'Merchandise') is null
drop table Merchandise
Go
Create table Merchandise([分类编号] nvarchar(50),[名称] nvarchar(50),[个数] int,[价格] decimal(18,2))
Insert Merchandise
select N'001001',N'Nokia',1,2000.00 union all
select N'001001',N'三星',2,3000.00 union all
select N'001002001',N'白色苹果',1,4000.00 union all
select N'003001001001',N'名牌女包',1,20000.00 union all
select N'003001001001',N'普通女包',1,300.00 union all
select N'003001001001',N'贵族女包',1,100000.00 union all
select N'003001002',N'黑色男包',2,300.00 union all
select N'003001002',N'棕色男包',1,170.00go
IF OBJECT_ID('NumType') IS NOT NULL
DROP VIEW NumType
go
CREATE VIEW NumType
AS
WITH Cte (Lev,num,Name)
AS
(
select 1,1,N'一' union all
select 1,2,N'二' union all
select 1,3,N'三' union all
select 2,1,N'(一)' union all
select 2,2,N'(二)' union all
select 2,3,N'(三)' UNION all
SELECT lev=3,
number+1 AS num,
CAST(number+1 AS NVARCHAR(2)) AS name
FROM master.dbo.spt_values AS c
WHERE type='P' AND number<20
UNION ALL
SELECT
lev=5,
number+1 AS num,
NCHAR(number+9312) AS Name
FROM master.dbo.spt_values AS a
WHERE type='P' AND number<20
UNION ALL
SELECT
lev=4,
number+1 AS num,
NCHAR(9312+20+number) as Name
FROM master.dbo.spt_values AS a
WHERE type='P' AND number<20
)
SELECT * FROM Cte
GO;with b
as
(
Select
a.[编号],a.[名称]
,SUM(b.[个数]) AS [个数] ,SUM(b.[价格]*b.[个数]) AS [价格]
,[Lev]=DENSE_RANK()over(order by len([父编号])),
num=DENSE_RANK()OVER(PARTITION BY [父编号] ORDER BY a.[编号])
from Category as a
inner join Merchandise as b on b.分类编号 like a.编号+'%'
group by a.[父编号],a.[编号],a.[名称]
)
select
[Name],[编号],[名称],[个数],[价格]
from (
select * from b union all
select
a.[分类编号] as [编号],a.[名称],a.[个数],a.[价格],b.lev+1 AS lev,ROW_NUMBER()OVER(PARTITION BY [分类编号] ORDER BY [分类编号]) AS num
from Merchandise as a
inner join b as b on a.分类编号=b.编号
)t1,NumType as t2
where t2.[Lev]=t1.[Lev] AND t1.num=t2.num
ORDER by [编号],t1.lev,t1.num
/*
Name 编号 名称 个数 价格
一 001 数码 4 12000.00
(一) 001001 手机 3 8000.00
1 001001 Nokia 1 2000.00
2 001001 三星 2 3000.00
(二) 001002 本本 1 4000.00
1 001002001 苹果 1 4000.00
⑴ 001002001 白色苹果 1 4000.00
二 003 配饰 6 121070.00
(一) 003001 箱包 6 121070.00
1 003001001 女包 3 120300.00
⑴ 003001001001 手提女包 3 120300.00
① 003001001001 名牌女包 1 20000.00
② 003001001001 普通女包 1 300.00
③ 003001001001 贵族女包 1 100000.00
2 003001002 男包 3 770.00
⑴ 003001002 黑色男包 2 300.00
⑵ 003001002 棕色男包 1 170.00
*/