非常抱歉,又来发这个贴子。因为这个是阿里巴巴B2B全行业电子商务网站一个核心业务功能,我还没有得到最好的答案,因此,又发一次!
这次,我把表,数据,关系,和业务模型全解释清楚,免得关心网友不好测试! 以下SQL测试无误具体的内容如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Product]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Product]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SysClassAttribute]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[SysClassAttribute]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SysClassAttributeValue]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[SysClassAttributeValue]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sysclass]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[sysclass]
GOCREATE TABLE [dbo].[Product] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Productname] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[SysclassID] [int] NULL,
[Price] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
/*产品表;productname:产品名称;sysclassID:系统行业分类的关联ID号*;price:价格*/ CREATE TABLE [dbo].[SysClassAttribute] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[EN_AttributeName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[GB_AttributeName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[SysclassID] [int] NULL
) ON [PRIMARY]
GO
/*产品附加属性表;GB_AttributeName:产品附加属性的中文名称;sysclassID:系统行业分类的关联ID号*/ CREATE TABLE [dbo].[SysClassAttributeValue] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ProductID] [int] NULL ,
[SysClassAttributeID] [int] NULL ,
[SysClassAttributeStr] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
/*产品附加属性的值表;productID:产品关联ID号;SysClassAttributeID:产品附加属性表里的关联ID号;SysClassAttributeStr 产品具体拥有的附加属性的值*/ CREATE TABLE [dbo].[sysclass] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Classname] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[upID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
/*系统产品分类表;classname:行业分类名称;UPID:系统行业分类的关联上线ID号,如果为0表示为顶级分类*/ insert into product (productname,sysclassID,price)values('花朵童装',5,'95')
insert into product (productname,sysclassID,price)values('红孩子童装',5,'50')
insert into product (productname,sysclassID,price)values('红旗电机',3,'150')
insert into product (productname,sysclassID,price)values('抽水电机',3,'120')insert into SYSCLASS (classname,upid)values('抽水电机',0)
insert into SYSCLASS (classname,upid)values('',0)
insert into SYSCLASS (classname,upid)values('电机',1)
insert into SYSCLASS (classname,upid)values('服装',0)
insert into SYSCLASS (classname,upid)values('童装',4)insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','面料',5)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','size',5)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','季节',5)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','转速',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','启动方式',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','线圈电阻',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','电功率',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','输入电压',3)insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,4,'500')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,5,'直流')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,6,'50')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,7,'600W')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,8,'60V')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(4,4,'500')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(4,5,'直流')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(4,8,'80V')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(1,1,'20%棉 50%毛')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(1,2,'xx')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(1,3,'冬')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(2,1,'20%棉 75%毛')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(2,3,'冬')
go在产品表里的记录是:(product)ID productname sysclassid price
1 花朵童装 5 95元
2 红孩子童装 5 50元
3 红旗电机 3 150元
4 抽水电机 3 120元
/*productname:产品名称;sysclassID:系统行业分类的关联ID号*/在行业分类表里的记录是:(sysclass)ID classname upid
1 五金机电 0
3 电机 1
4 服装 0
5 童装 4
/*classname:行业分类名称;UPID:系统行业分类的关联上线ID号,如果为0表示为顶级分类*/在分类产品附加属性表里的记录是:(SysClassAttribute)ID GB_AttributeName sysclassID
1 面料 5
2 size 5
3 季节 5
4 转速 3
5 启动方式 3
6 线圈电阻 3
7 电功率 3
8 输入电压 3
/*GB_AttributeName:产品附加属性的中文名称;sysclassID:系统行业分类的关联ID号*/在分类产品附加属性值表里的记录是:(SysClassAttributeValue)ID productID SysClassAttributeID SysClassAttributeStr
1 3 4 500
2 3 5 直流
3 3 6 50
4 3 7 600W
5 3 8 60V
6 4 4 500
7 4 5 直流
8 4 8 80V
9 1 1 20%棉 50%毛
10 1 2 xx
11 1 3 冬
12 2 1 20%棉 75%毛
13 2 3 冬
/*productID:产品关联ID号;SysClassAttributeID:产品附加属性表里的关联ID号;SysClassAttributeStr 产品具体拥有的附加属性的值*/
当用户选择童装里的:花朵童装,红孩子童装时:
的对比结果是:
id 产品名 分类 价格 面料 size 季节 1 花朵童装 童装 95元 20%棉 50%毛 xx 冬
2 红孩子童装 童装 50元 20%棉 75%毛 冬
当用户选择电机里的:红旗电机,抽水电机时:
的对比结果是:ID 产品名 分类 价格 转速 启动方式 线圈电阻率 电功率 输入电压 3 红旗电机 电机 150元 500 直流 50 600W 60V
4 抽水电机 电机 120元 550 直流 80V我想用一个复合查询建立这个查询结果,请高手点拨![内容续:]
这次,我把表,数据,关系,和业务模型全解释清楚,免得关心网友不好测试! 以下SQL测试无误具体的内容如下:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Product]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Product]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SysClassAttribute]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[SysClassAttribute]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SysClassAttributeValue]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[SysClassAttributeValue]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sysclass]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[sysclass]
GOCREATE TABLE [dbo].[Product] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Productname] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[SysclassID] [int] NULL,
[Price] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
/*产品表;productname:产品名称;sysclassID:系统行业分类的关联ID号*;price:价格*/ CREATE TABLE [dbo].[SysClassAttribute] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[EN_AttributeName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[GB_AttributeName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[SysclassID] [int] NULL
) ON [PRIMARY]
GO
/*产品附加属性表;GB_AttributeName:产品附加属性的中文名称;sysclassID:系统行业分类的关联ID号*/ CREATE TABLE [dbo].[SysClassAttributeValue] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ProductID] [int] NULL ,
[SysClassAttributeID] [int] NULL ,
[SysClassAttributeStr] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
/*产品附加属性的值表;productID:产品关联ID号;SysClassAttributeID:产品附加属性表里的关联ID号;SysClassAttributeStr 产品具体拥有的附加属性的值*/ CREATE TABLE [dbo].[sysclass] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Classname] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[upID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
/*系统产品分类表;classname:行业分类名称;UPID:系统行业分类的关联上线ID号,如果为0表示为顶级分类*/ insert into product (productname,sysclassID,price)values('花朵童装',5,'95')
insert into product (productname,sysclassID,price)values('红孩子童装',5,'50')
insert into product (productname,sysclassID,price)values('红旗电机',3,'150')
insert into product (productname,sysclassID,price)values('抽水电机',3,'120')insert into SYSCLASS (classname,upid)values('抽水电机',0)
insert into SYSCLASS (classname,upid)values('',0)
insert into SYSCLASS (classname,upid)values('电机',1)
insert into SYSCLASS (classname,upid)values('服装',0)
insert into SYSCLASS (classname,upid)values('童装',4)insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','面料',5)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','size',5)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','季节',5)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','转速',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','启动方式',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','线圈电阻',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','电功率',3)
insert into SysClassAttribute (EN_AttributeName,GB_AttributeName,SysclassID)values('','输入电压',3)insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,4,'500')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,5,'直流')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,6,'50')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,7,'600W')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(3,8,'60V')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(4,4,'500')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(4,5,'直流')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(4,8,'80V')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(1,1,'20%棉 50%毛')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(1,2,'xx')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(1,3,'冬')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(2,1,'20%棉 75%毛')
insert into SysClassAttributeValue (ProductID,SysClassAttributeID,SysClassAttributeStr)values(2,3,'冬')
go在产品表里的记录是:(product)ID productname sysclassid price
1 花朵童装 5 95元
2 红孩子童装 5 50元
3 红旗电机 3 150元
4 抽水电机 3 120元
/*productname:产品名称;sysclassID:系统行业分类的关联ID号*/在行业分类表里的记录是:(sysclass)ID classname upid
1 五金机电 0
3 电机 1
4 服装 0
5 童装 4
/*classname:行业分类名称;UPID:系统行业分类的关联上线ID号,如果为0表示为顶级分类*/在分类产品附加属性表里的记录是:(SysClassAttribute)ID GB_AttributeName sysclassID
1 面料 5
2 size 5
3 季节 5
4 转速 3
5 启动方式 3
6 线圈电阻 3
7 电功率 3
8 输入电压 3
/*GB_AttributeName:产品附加属性的中文名称;sysclassID:系统行业分类的关联ID号*/在分类产品附加属性值表里的记录是:(SysClassAttributeValue)ID productID SysClassAttributeID SysClassAttributeStr
1 3 4 500
2 3 5 直流
3 3 6 50
4 3 7 600W
5 3 8 60V
6 4 4 500
7 4 5 直流
8 4 8 80V
9 1 1 20%棉 50%毛
10 1 2 xx
11 1 3 冬
12 2 1 20%棉 75%毛
13 2 3 冬
/*productID:产品关联ID号;SysClassAttributeID:产品附加属性表里的关联ID号;SysClassAttributeStr 产品具体拥有的附加属性的值*/
当用户选择童装里的:花朵童装,红孩子童装时:
的对比结果是:
id 产品名 分类 价格 面料 size 季节 1 花朵童装 童装 95元 20%棉 50%毛 xx 冬
2 红孩子童装 童装 50元 20%棉 75%毛 冬
当用户选择电机里的:红旗电机,抽水电机时:
的对比结果是:ID 产品名 分类 价格 转速 启动方式 线圈电阻率 电功率 输入电压 3 红旗电机 电机 150元 500 直流 50 600W 60V
4 抽水电机 电机 120元 550 直流 80V我想用一个复合查询建立这个查询结果,请高手点拨![内容续:]
解决方案 »
- 求助!!作业与链接服务器问题!
- 请问BEGIN TRANSACTION能不能像BEGIN。。END那样嵌套?
- /\/\/\/\/\/\/\/\/\/ 查询一个表里相同姓名但是身份证不同的所有人的SQL怎么写啊 谢谢
- 这个怎么实现,给个思路!!
- 如何调用SqlServer200导出数据到Excel的存储过程?
- 挺怪的一个SQL
- 我只想查找一个Table对应某个字段:如Pricid字段不重复的所有字段的信息,请各位指点儿!
- sql 中如何 通过日志文件回复。数据库文件
- SQL中数据合并问题
- 怎样得到两个datetime类型之间的每一天的列表?
- 急!SQLSERVER2000数据库运行一天以后经常连不上,重启计算机后又正常。已经打了sp4
- 数据更新的问题
SysClassAttribute:产品附加属性表,这个表主要存储与行业分类相关联的产品的个别属性,如上面的例子:电机拥有:电压,电功率,转速,启动方式等产品属性;而服装就拥有:面料,size,季节等产品品属性;SysClassAttribute表中的sysclassID字段表示该分类的产品具有哪些产品属性,与sysclass表的ID字段关联,如果一个分类(例电机)有五个产品属性就会在SysClassAttribute表中有五条记录!
Sysclass表与SysClassAttribute表是这个业务功能核心,打个比方,阿里巴巴这个全行业的网站如果把电机这个分类的产品属性和电机网里的产品分类做得一样的,那么,他可以取代中国电机网(行业网站)里的产品对比系统,也就是说做好了垂直网站的核心功能!在电机这一块也可以直接与中国电机网进行正面竞争,且更具优势!Product:产品表,这个表主要存储产品,SysclassID字段按上面的方式关联,ID字段关联SysClassAttributeValue(存储产品的附加属性的值的表)的ProductID字段;
SysClassAttributeValue:产品附加属性的值表,这个表主要是存储产品按行业分类的属性所获得的值,如果一个行业分类为5个属性,且一个产品提供了5个属性值,那么在表SysClassAttributeValue,就会为这个产品建立5条记录,表中的ProductID关联Product表中的ID字段,表中SysClassAttributeID字段关联SysClassAttributeID表中的ID字段, SysClassAttributeStr是这个产品根据所属行业的附加属性所获取的值。
动态sql语句基本语法
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num