表的结构是这样,
field1,field2,field3,计量单位,数量.
field1,field2 是关键字
记录中计量单位有'块'和'吨'
要把'块'和'吨'在一条记录中显示出来
如:
field1,field2,field3, 块数, 吨数
--------------------------------
记录1   记录1   记录1   xx    xxx
记录2   记录2   记录2   yy    yyy我的意思表达清楚了吧
这样的语句该怎么写?

解决方案 »

  1.   

    select a.field1,a.field2,a.field3,isnull(b.数量,0) as 块数,isnull(c.数量,0) as 吨数
    from table090209 a 
    left outer join table090209 b 
    on a.Field1=b.Field1 and a.Field2=b.Field2 and b.计量单位='块'
    left outer join table090209 c
    on a.Field1=c.Field1 and a.Field2=c.Field2 and c.计量单位='吨'
      

  2.   

    select field1,field2,field3,块数=(case when (计量单位='块') then 数量 else 0 end),
    吨数=(case when (计量单位='吨') then 数量 else 0 end) from table090209
      

  3.   


    declare @table table (field1 varchar(5),field2 varchar(5),field3 varchar(5),块数 int,吨数 int)
    insert into @table
    select '记录1','记录1','记录1',1,0 union all
    select '记录2','记录2','记录2',0,3 union all
    select '记录2','记录2','记录2',2,0 union all
    select '记录2','记录2','记录2',2,4 union all
    select '记录2','记录2','记录2',1,3 
    select * ,cast(吨数 as varchar(20))+' 吨'+cast(块数 as varchar(20)) +' 块' as '你是要这个吗?' from @table/*
    field1 field2 field3 块数          吨数          你是要这个吗?
    ------ ------ ------ ----------- ----------- ----------------------------------------------
    记录1    记录1    记录1    1           0           0 吨1 块
    记录2    记录2    记录2    0           3           3 吨0 块
    记录2    记录2    记录2    2           0           0 吨2 块
    记录2    记录2    记录2    2           4           4 吨2 块
    记录2    记录2    记录2    1           3           3 吨1 块
    */
      

  4.   

    纠正一下,我上面弄错了,field1,field2并不是主关键字.
    field1,field2,field3, 计量单位, 数量 
    -----------------------------------
    a       b      c      吨         2
    a       b      c      块         20要变成这样:field1,field2,field3, 块数 , 吨数
    --------------------------------
    a      b         c     20     2 不好意思,上面写错了
      

  5.   

    刚才看差了,不好意思,重新写的--插入数据
    declare @table table (field1 varchar(5),field2 varchar(5),field3 varchar(5),计量单位 varchar(5),数量 int)
    insert into @table
    select '记录1','记录1','记录1','吨',2 union all
    select '记录2','记录2','记录2','块',3 union all
    select '记录2','记录2','记录2','吨',1 union all
    select '记录2','记录2','记录2','块',4 union all
    select '记录2','记录2','记录2','斤',3 
    --查看数据
    select * from @table
    /*
    field1 field2 field3 计量单位  数量
    ------ ------ ------ ----- -----------
    记录1    记录1    记录1    吨     2
    记录2    记录2    记录2    块     3
    记录2    记录2    记录2    吨     1
    记录2    记录2    记录2    块     4
    记录2    记录2    记录2    斤     3
    */select field1,field2,field3,
    块数=( case 计量单位 when '块' then  数量 else 0 end), 
    吨数=( case 计量单位 when '吨' then  数量 else 0 end)
    from @table a where 计量单位 in ('吨','块')
    /*
    field1 field2 field3 块数          吨数
    ------ ------ ------ ----------- -----------
    记录1    记录1    记录1    0           2
    记录2    记录2    记录2    3           0
    记录2    记录2    记录2    0           1
    记录2    记录2    记录2    4           0
    */
      

  6.   


    insert into table(....)
    select 1  field1,1 field2, 4 field3,'吨' as 计量单位, 1 as num
    union all 
    select 1  field1,2 field2, 4 field3,'块' as 计量单位, 3 as num
    union all 
    select 1  field1,3 field2, 4 field3,'吨' as 计量单位, 4 as num
    union all 
    select 2  field1,1 field2, 5 field3,'块' as 计量单位, 6 as num
    union all 
    select 2  field1,2 field2, 4 field3,'吨' as 计量单位, 1 as num 
    select 吨数 = case when AA.计量单位='吨' then AA.num 
                  else 0 end,
           块数 = case when AA.计量单位='块' then AA.num 
                  else 0 end,
              AA.计量单位,AA.field1,AA.field2, AAA.field3 
              from(   
                  
                  select  sum(case when 计量单位 = '吨' then num
                              when 计量单位 = '块' then num
                               else 0 end) As  num,计量单位,field1,field2
                           from table
                           group by 计量单位,field1,field2
                   ) AS AA,table as AAAwhere aa.field1=aaa.field1
       and aa.field2=aaa.field2
      

  7.   

    谢谢哈尔滨和小绵羊,问题基本解决了
    我还要每条记录做汇总,
    不知道case和sum连在一起该怎么写?
      

  8.   

    select A.field1,A.Field2,A.field3,sum(块数) as 块数,sum(吨数) as 吨数 from
    (
    select field1,field2,field3,块数=(case when (计量单位='块') then 数量 else 0 end),
    吨数=(case when (计量单位='吨') then 数量 else 0 end) from table090209) A group by field1,field2,field3
      

  9.   

    再修改后的--插入数据
    declare @table table (field1 varchar(5),field2 varchar(5),field3 varchar(5),计量单位 varchar(5),数量 int)
    insert into @table
    select '记录1','记录1','记录1','吨',2 union all
    select '记录2','记录2','记录2','块',3 union all
    select '记录2','记录2','记录2','吨',1 --查看数据
    select * from @table
    /*
    field1 field2 field3 计量单位  数量
    ------ ------ ------ ----- -----------
    记录1    记录1    记录1    吨     2
    记录2    记录2    记录2    块     3
    记录2    记录2    记录2    吨     1
    */select distinct field1,field2,field3,块数=sum(块数),吨数=sum(吨数) from 
    (
    select  field1,field2,field3,
    块数=( case 计量单位 when '块' then  数量 else 0 end), 
    吨数=( case 计量单位 when '吨' then  数量 else 0 end)
    from @table a where 计量单位 in ('吨','块')
    )
    bb group by field1,field2,field3/*
    field1 field2 field3 块数          吨数
    ------ ------ ------ ----------- -----------
    记录1    记录1    记录1    0           2
    记录2    记录2    记录2    3           1
    */