能不能用一句sql语句把一张表内两条记录相同字段不同值全部列出来比如表 table1
字段         field1,field2,field3,field4,field5
第一条记录:  1         2      3        4       5
第二条记录:  2         2      4        5       6选出来的结果表就是:
字段名          第一条记录值         第二条记录值
field1                1                   2
field3                3                   4
field4                4                   5
field5                5                   6一个棘手的问题就是不知道怎么把字段名也一并取出来。。
请大家帮帮忙补充一句,最好是能处理不固定字段数的表,因为目前项目里要做类似处理的表不止一张。。

解决方案 »

  1.   

    CSDN发帖时和帖子显示的空格大小不一样。。说明下
    表里5个字段,
    2条记录中, field2的值完全相同(都是 2 ),所以不取出field2的数据
    取得结果就是field1,field3,field4,field5,和这4个字段对应的值
      

  2.   

    字段             field1     field2     field3      field4      field5
    第一条记录:     1           2          3           4           5
    第二条记录:     2           2          4           5           6 1和2是field1的值不是record id
      

  3.   

    用SQL不能做到,用储存过程来解决,简单一点:
    SELECT a.field1,if(a.field2=b.field2,'',concat(a.field2,' ',b.field2),
    if(a.field3=b.field3,'',concat(a.field3,' ',b.field3),
    if(a.field4=b.field4,'',concat(a.field4,' ',b.field4),
    if(a.field5=b.field5,'',concat(a.field5,' ',b.field5)
     from ttg a inner join ttg b on a.field1=b.field1+1
      

  4.   

    上述代码假设FIELD1是连续的,如不是,添加辅助列ID,自增
      

  5.   

    to   wwwwbif的写法在sql里用case when也可以实现,问题是字段名称怎么取得?
    我希望返回的结果里有3个字段
    1,表的字段名 
    2,第一条数据的值
    3,第二条数据的值
      

  6.   

    示例:
    select * from (
    SELECT 
    if(a.field1=b.field1,'',a.field1) as f1,
    if(a.field1=b.field1,'',b.field1) as f1a,
    if(a.field1=b.field1,'','field1') as f1name
    from ttg a inner join ttg b on a.field1=b.field1+1
    union
    SELECT 
    if(a.field2=b.field2,'',a.field2) as f1,
    if(a.field2=b.field2,'',b.field2) as f1a,
    if(a.field2=b.field2,'','field2') as f1name
    from ttg a inner join ttg b on a.field1=b.field1+1)
    where f1<>' '动态生成SQL语句,还不如用存储过程
      

  7.   

    是啊,除非动态生成SQL语句,取得相关表的所有字段,循环,生成上述SQL语句