非常抱歉,又来发这个贴子。因为这个是阿里巴巴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我想用一个复合查询建立这个查询结果,请高手点拨![内容续:]

解决方案 »

  1.   

    [继上贴:]这个功能是阿里巴巴的B2B系统里新版启用的一个功能,对于做好全行业B2B网站里的垂直行业细分功能与属性有很好的作用,这个附加属性做得好的话,可以取代垂直行业网站的细分!上次发贴 dawugui 朋友给我回复了,很感谢他的关心!我说一下四个表的关系:Sysclass:系统产品分类表,这个表是这个题的主表,系统行业分类表,ID字段关联product表中的sysclassID字段;classname是分类名称,存储分类名称的值;
    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是这个产品根据所属行业的附加属性所获取的值。
      

  2.   

    如果只针对你这两个例,可以单独的一个一个对应写SQL就行了.如果要综合考虑,得用动态SQL,太麻烦,给你个基本语句,自己研究研究.
    动态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 
      

  3.   

    这里不是回过你吗? 难道两个不一样?不过我倒真的没细看.\http://topic.csdn.net/u/20071101/19/bf6e5503-37cd-4cc1-a899-84befac80952.html
      

  4.   

    感谢  fcuandy ,shilifeng  的关心!我希望得到更好执行效率答案,还有吗?
      

  5.   

    阿里巴巴原来在用mssql,网站好象不是.net做的呀?