其实就是行转列。see
http://topic.csdn.net/u/20071101/19/bf6e5503-37cd-4cc1-a899-84befac80952.html

解决方案 »

  1.   


    select * from
    (
    select tb.产品id,芯片厂商=max(case when 参数名称='芯片厂商' then 参数值 end),主频=max(case when 参数名称='主频' then 参数值 end),核心数量=max(case when 参数名称='核心数量' then 参数值 end)
    from tb,tb2
    where tb.参数id=tb2.id
    group by tb.产品id
    ) K
    where 芯片厂商='intel' and 核心数量 =1
      

  2.   

    和行列转换没关系.create table 参数名称表(id int , 参数名称 varchar(10))
    insert into 参数名称表 values(1 ,'芯片厂商') 
    insert into 参数名称表 values(2 ,'主频') 
    insert into 参数名称表 values(3 ,'核心数量') 
    create table 参数值表(id int , 参数名称id int , 参数值 varchar(10),产品ID int)
    insert into 参数值表 values(1 ,1, 'intel'  ,123) 
    insert into 参数值表 values(2 ,2, '2.2GHz' ,123) 
    insert into 参数值表 values(3 ,3, '1'      ,123) 
    insert into 参数值表 values(4 ,1, 'amd'    ,124) 
    insert into 参数值表 values(5 ,2, '2.2GHz' ,124) 
    insert into 参数值表 values(6 ,3, '1'      ,124) 
    insert into 参数值表 values(7 ,1, 'amd'    ,125) 
    insert into 参数值表 values(8 ,2, '2.0GHz' ,125) 
    insert into 参数值表 values(9 ,3, '1'      ,125) 
    insert into 参数值表 values(10,1, 'intel'  ,126) 
    insert into 参数值表 values(11,2, '2.2G'   ,126) 
    insert into 参数值表 values(12,3, '2'      ,126) 
    insert into 参数值表 values(13,1, 'intel'  ,127) 
    insert into 参数值表 values(14,2, '1.5G'   ,127) 
    insert into 参数值表 values(15,3, '1'      ,127) 
    insert into 参数值表 values(16,1, 'intel'  ,128) 
    insert into 参数值表 values(17,2, '3.0GHz' ,128) 
    insert into 参数值表 values(18,3, '1'      ,128) 
    goselect a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '芯片厂商' and b.id = a.参数名称id and a.参数值 = 'intel'drop table 参数名称表,参数值表/*
    产品ID        
    ----------- 
    123
    126
    127
    128(所影响的行数为 4 行)
    */
      

  3.   

    create table 参数名称表(id int , 参数名称 varchar(10))
    insert into 参数名称表 values(1 ,'芯片厂商') 
    insert into 参数名称表 values(2 ,'主频') 
    insert into 参数名称表 values(3 ,'核心数量') 
    create table 参数值表(id int , 参数名称id int , 参数值 varchar(10),产品ID int)
    insert into 参数值表 values(1 ,1, 'intel'  ,123) 
    insert into 参数值表 values(2 ,2, '2.2GHz' ,123) 
    insert into 参数值表 values(3 ,3, '1'      ,123) 
    insert into 参数值表 values(4 ,1, 'amd'    ,124) 
    insert into 参数值表 values(5 ,2, '2.2GHz' ,124) 
    insert into 参数值表 values(6 ,3, '1'      ,124) 
    insert into 参数值表 values(7 ,1, 'amd'    ,125) 
    insert into 参数值表 values(8 ,2, '2.0GHz' ,125) 
    insert into 参数值表 values(9 ,3, '1'      ,125) 
    insert into 参数值表 values(10,1, 'intel'  ,126) 
    insert into 参数值表 values(11,2, '2.2G'   ,126) 
    insert into 参数值表 values(12,3, '2'      ,126) 
    insert into 参数值表 values(13,1, 'intel'  ,127) 
    insert into 参数值表 values(14,2, '1.5G'   ,127) 
    insert into 参数值表 values(15,3, '1'      ,127) 
    insert into 参数值表 values(16,1, 'intel'  ,128) 
    insert into 参数值表 values(17,2, '3.0GHz' ,128) 
    insert into 参数值表 values(18,3, '1'      ,128) 
    goselect a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '芯片厂商' and b.id = a.参数名称id and a.参数值 = 'intel' and a.产品ID in
    (
      select a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '核心数量' and b.id = a.参数名称id and a.参数值 = '1'
    )drop table 参数名称表,参数值表/*
    产品ID        
    ----------- 
    123
    127
    128(所影响的行数为 3 行)
    */
      

  4.   

    create table 参数名称表(id int , 参数名称 varchar(10))
    insert into 参数名称表 values(1 ,'芯片厂商') 
    insert into 参数名称表 values(2 ,'主频') 
    insert into 参数名称表 values(3 ,'核心数量') 
    create table 参数值表(id int , 参数名称id int , 参数值 varchar(10),产品ID int)
    insert into 参数值表 values(1 ,1, 'intel'  ,123) 
    insert into 参数值表 values(2 ,2, '2.2GHz' ,123) 
    insert into 参数值表 values(3 ,3, '1'      ,123) 
    insert into 参数值表 values(4 ,1, 'amd'    ,124) 
    insert into 参数值表 values(5 ,2, '2.2GHz' ,124) 
    insert into 参数值表 values(6 ,3, '1'      ,124) 
    insert into 参数值表 values(7 ,1, 'amd'    ,125) 
    insert into 参数值表 values(8 ,2, '2.0GHz' ,125) 
    insert into 参数值表 values(9 ,3, '1'      ,125) 
    insert into 参数值表 values(10,1, 'intel'  ,126) 
    insert into 参数值表 values(11,2, '2.2G'   ,126) 
    insert into 参数值表 values(12,3, '2'      ,126) 
    insert into 参数值表 values(13,1, 'intel'  ,127) 
    insert into 参数值表 values(14,2, '1.5G'   ,127) 
    insert into 参数值表 values(15,3, '1'      ,127) 
    insert into 参数值表 values(16,1, 'intel'  ,128) 
    insert into 参数值表 values(17,2, '3.0GHz' ,128) 
    insert into 参数值表 values(18,3, '1'      ,128) 
    go--方法一
    select a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '芯片厂商' and b.id = a.参数名称id and a.参数值 = 'intel' and a.产品ID in
    (
      select a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '核心数量' and b.id = a.参数名称id and a.参数值 = '1'
    )
    /*
    产品ID        
    ----------- 
    123
    127
    128(所影响的行数为 3 行)
    */--方法二
    select 产品ID from
    (
      select distinct a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '芯片厂商' and b.id = a.参数名称id and a.参数值 = 'intel'
      union all
      select a.产品ID from 参数值表 a , 参数名称表 b where b.参数名称 = '核心数量' and b.id = a.参数名称id and a.参数值 = '1'
    ) t
    group by 产品ID having count(1) = 2
    /*
    产品ID        
    ----------- 
    123
    127
    128(所影响的行数为 3 行)
    */drop table 参数名称表,参数值表