有表table,有字段
产品名称          产品数量           类型
产品1             20                 出
产品2             10                 入
产品3             20                 调
产品1             10                 调
产品2             10                 出
产品1             30                 出
要求结果如下:
   产品名称        出数量          入数量           调数量
  产品1            50               0                10
  产品2            10               10               0
  产品3            0                0                20请高手指点,谢谢

解决方案 »

  1.   

    Create table t1(产品名称 varchar(10),产品数量 int,类型 varchar(10))
    insert t1 select '产品1',20,'出'
    union all select '产品2',10,'入'
    union all select '产品3',10,'调'
    union all select '产品1',10,'调'
    union all select '产品2',10,'出'
    union all select '产品1',10,'出'
     
    Select 
    产品名称,
    SUM(Case 类型 When '出' Then 产品数量 Else 0 End) As 出,
    SUM(Case 类型 When '入' Then 产品数量 Else 0 End) As 入,
    SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调,
    From t1
    Group By 产品名称
    Order By 产品名称--如果类型不固定,用动态語句
    Declare @S Varchar(1000)
    Set @S=''
    Select @S=@S+',SUM(Case 类型 When '''+类型+''' Then 产品数量 Else 0 End) As '+类型 From (Select Distinct 类型 From t1) A Order By 类型
    Set @S='Select 产品名称'+@S+' From t1 Group By 产品名称 Order By 产品名称'
    EXEC(@S)
      

  2.   

    --小改一下
    Create table t1(产品名称 varchar(10),产品数量 int,类型 varchar(10))
    insert t1 select '产品1',20,'出'
    union all select '产品2',10,'入'
    union all select '产品3',10,'调'
    union all select '产品1',10,'调'
    union all select '产品2',10,'出'
    union all select '产品1',10,'出'
     
    Select 
    产品名称,
    SUM(Case 类型 When '出' Then 产品数量 Else 0 End) As 出数量,
    SUM(Case 类型 When '入' Then 产品数量 Else 0 End) As 入数量,
    SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调数量
    From t1
    Group By 产品名称
    Order By 产品名称--如果类型不固定,用动态語句
    Declare @S Varchar(1000)
    Set @S=''
    Select @S=@S+',SUM(Case 类型 When '''+类型+''' Then 产品数量 Else 0 End) As '+类型+'数量' From (Select Distinct 类型 From t1) A Order By 类型
    Set @S='Select 产品名称'+@S+' From t1 Group By 产品名称 Order By 产品名称'
    EXEC(@S)
      

  3.   

    declare @a table
    (
    产品名称 varchar(10),
    产品数量 int,
    类型 varchar(2)
    )
    insert into @a
    select '产品1',20,'出' union all
    select '产品2',10,'入' union all
    select '产品3',20,'调' union all
    select '产品1',10,'调' union all
    select '产品2',10,'出' union all
    select '产品1',30,'出'select * from @aselect
    产品名称,
    sum (case when 类型='出' then 产品数量 else 0 end) as 出数量,
    sum (case when 类型='入' then 产品数量 else 0 end) as 入数量,
    sum (case when 类型='调' then 产品数量 else 0 end) as 调数量
    from @a
    group by 产品名称/*
    产品名称       产品数量        类型   
    ---------- ----------- ---- 
    产品1        20          出
    产品2        10          入
    产品3        20          调
    产品1        10          调
    产品2        10          出
    产品1        30          出产品名称       出数量         入数量         调数量         
    ---------- ----------- ----------- ----------- 
    产品1        50          0           10
    产品2        10          10          0
    产品3        0           0           20
    */
      

  4.   

    select 产品名称,
    出数量=sum(case when 类型='出' then 产品数量 else 0 end),
    入数量=sum(case when 类型='入' then 产品数量 else 0 end),
    调数量=sum(case when 类型='调' then 产品数量 else 0 end),
    group by 产品名称
      

  5.   

    不好意思啊,刚才题目错了
    其实是有三张表呢
    table主(产品名称,产品ID){(名称1,prod1),(名称2,prod2),(名称3,prod3)…}
    table从(产品数量,类型ID,产品ID){(10,1,prod1),(20,2,prod2)…}
    table3(类型ID,类型名称){(1,出),(2,入),(3,调)…}
      

  6.   

    when 后面能不能带多个条件啊,比如说when '1' or '2' or '3'
      

  7.   

    第三个表没用把when后面的出,入,调分别用1,2,3替代了就可以
      

  8.   

    when 后面能不能带多个条件啊,比如说when '1' or '2' or '3'
      

  9.   

    我需要在when 后面加多个条件,例如下面的
    Select 
    产品名称,
    SUM(Case 类型 When '出1' or '出2' or '出3' Then 产品数量 Else 0 End) As 出数量,
    SUM(Case 类型 When '入' or '入1' or '入2' Then 产品数量 Else 0 End) As 入数量,
    SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调数量
    From t1
    Group By 产品名称
    Order By 产品名称怎么办?
      

  10.   

    When后面要跟的话可以跟多个条件,但是你先说清楚你想要干什么
      

  11.   

    Select 
    产品名称,
    SUM(Case When 类型='出1' or 类型='出2' or 类型='出3' Then 产品数量 Else 0 End) As 出数量,
    SUM(Case When 类型='入' or 类型='入1' or 类型='入2' Then 产品数量 Else 0 End) As 入数量,
    SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调数量
    From t1
    Group By 产品名称
    Order By 产品名称