内容如下:编号  数据编号  名称   内容
1      001      姓名   张三
2      001      性别   男
3      001      年龄   17就是,根据数据编号,得知这三条数据属于同一个数据,是否可以用SQL语句,查询出来,并且组成一条查询结果返回,即返回编号  姓名   性别    年龄
1     张三   男      17是否可以查询出前3年数据并组成上面1条数据返回给dataset数据集???谢谢,盼复

解决方案 »

  1.   

    --如果名稱是固定的
    Select
    数据编号,
    Max(Case 名称 When '姓名' Then 内容 Else '' End) As 姓名,
    Max(Case 名称 When '性别' Then 内容 Else '' End) As 性别,
    Max(Case 名称 When '年龄' Then 内容 Else '' End) As 年龄
    From

    Group By
    数据编号
      

  2.   

    --如果名稱不是固定的
    Declare @S Varchar(8000)
    Select @S = 'Select 数据编号'
    Select @S = @S + ' Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
    From 表 Group By 名称 Order By Min(编号)
    Select @S = @S + ' From 表 Group By 数据编号'
    EXEC(@S)
      

  3.   

    姓名、性别、年龄。都是不知道的。具体哪几个可以组成一条数据。是通过数据标号的。如:编号  数据编号  名称   内容
    1      001      姓名   张三
    2      001      性别   男
    3      001      年龄   17
    4      002      姓名   李四
    5      002      性别   男
    6      002      年龄   19就是,根据数据编号,得知这三条数据属于同一个数据,是否可以用SQL语句,查询出来,并且组成一条查询结果返回,即返回编号  姓名   性别    年龄
    1     张三   男      17
    2     李四   男      19只能是数据编号一样的组成一组。如果改成这个数据表就应该返回2条数据。。谢谢,盼复
      

  4.   

    create table tab(编号 int,数据编号 varchar(10),名称 varchar(10),内容 varchar(10))
    insert tab
    select 1  ,    '001' ,    '姓名',   '张三'
    union select 2 ,     '001'      ,'性别',   '男'
    union select 3  ,    '001'      ,'年龄',   '17'
    declare @str varchar(8000)
    set @str='select 编号=cast(数据编号 as int)'
    select @str=@str+','+名称+'=max(case when 内容='''+内容+''' then 内容 else '''' end)'
    from tab
    group by 数据编号,名称,内容exec(@str+' From tab Group By 数据编号')drop table tab
      

  5.   

    harvesthouhao() ( ) 信誉:100  2007-07-25 15:27:33  得分: 0  
     
     
       姓名、性别、年龄。都是不知道的。具体哪几个可以组成一条数据。是通过数据标号的。
    ------------用我下面寫的那個。Declare @S Varchar(8000)
    Select @S = 'Select 数据编号'
    Select @S = @S + ' Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
    From 表 Group By 名称 Order By Min(编号)
    Select @S = @S + ' From 表 Group By 数据编号'
    EXEC(@S)
      

  6.   

    一點bug,修改下Declare @S Varchar(8000)
    Select @S = 'Select 数据编号'
    Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
    From 表 Group By 名称 Order By Min(编号)
    Select @S = @S + ' From 表 Group By 数据编号'
    EXEC(@S)
      

  7.   

    服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'Case' 附近有语法错误。
      

  8.   

    harvesthouhao() ( ) 信誉:100  2007-07-25 15:46:59  得分: 0  
     
     
       服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'Case' 附近有语法错误。  
     
    -------------:),有bug。用這個Declare @S Varchar(8000)
    Select @S = 'Select 数据编号'
    Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
    From 表 Group By 名称 Order By Min(编号)
    Select @S = @S + ' From 表 Group By 数据编号'
    EXEC(@S)
      

  9.   

    对了,谢谢。另外可以问一下下面两句话是什么意思吗?From 表 Group By 名称 Order By Min(编号)
    Select @S = @S + ' From 表 Group By 数据编号'
      

  10.   

    肯定是不能去掉的。Declare @S Varchar(8000)
    Select @S = 'Select 数据编号'
    Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
    From 表 Group By 名称 Order By Min(编号)
    Select @S = @S + ' From 表 Group By 数据编号'
    EXEC(@S)這個動態語句中,@S中最終執行的語句就是這個Select
    数据编号,
    Max(Case 名称 When '姓名' Then 内容 Else '' End) As 姓名,
    Max(Case 名称 When '性别' Then 内容 Else '' End) As 性别,
    Max(Case 名称 When '年龄' Then 内容 Else '' End) As 年龄
    From

    Group By
    数据编号這樣,你對比這兩個,應該容易理解些。
      

  11.   

    现在,我就是不明白
    From 表 Group By 名称 Order By Min(编号) 为何要写上??? 其他的都能明白
      

  12.   

    harvesthouhao() ( ) 信誉:100  2007-07-25 16:03:19  得分: 0  
     
     
       现在,我就是不明白
    From 表 Group By 名称 Order By Min(编号) 为何要写上??? 其他的都能明白
      
     
    ------------Select @S = @S + ', Max(Case 名称 When ''' + 名称 + ''' Then 内容 Else '''' End) As [' + 名称 + ']'
    From 表 Group By 名称 Order By Min(编号)
    這段代碼就是循環生成這段代碼, Max(Case 名称 When '姓名' Then 内容 Else '' End) As 姓名
    , Max(Case 名称 When '性别' Then 内容 Else '' End) As 性别
    , Max(Case 名称 When '年龄' Then 内容 Else '' End) As 年龄