none
关于SQL表格间进行运算问题 RRS feed

  • 问题

  • temp表里有2行数据,有2个字段number和total都是int数据类型

    当我用select查询 第一行一列的数据加上第二行二列数据的结果,sql查询该如何写呢?

    2009年10月8日 7:39

答案

  • --建立测试表
    create table TempTable(
    	Num int not null,
    	Total int not null,
    	id int primary key identity not null
    );
    --插入测试数据
    insert into TempTable values(11,12);
    insert into TempTable values(21,22);
    
    --查询结果
    select sum( 
    	case 
    	   when rn=1 then Num	--第1行第1列
    	   when rn=2 then total--第2行第2列 
    	else 0 
    	end )as YouTotal
    from (select row_number() over(order by id asc) as rn
    	,Num,Total 
          from TempTable
    	) A
    /*
    YouTotal
    -----------
    33
    
    (1 行受影响)
    */
    
    --清理
    drop table TempTable
    
    
    2009年10月9日 1:41
    版主
  • sql 里面的数据, 没有顺序的概念, 不同的执行走不同的执行计划, 出来的顺序不能保证, 所以楼主纯粹用行的概念去处理数据, 会有些问题, 没有辅助的排序, 有时候可能会得到你不想要的结果
    2009年10月9日 4:06
  • create table TempTable(
    Num int not null,
    Total int not null
    )

    insert into TempTable values(11,12);
    insert into TempTable values(21,22);

    select num tt from
    (select top 1 num from TempTable order by num asc) a
    Union
    select total tt from
    (select top 1 total from TempTable order by total desc) b

    LZ大兄,以上不知道是不是您要的。
    不过感觉您的这个需求怪怪的,我想一般很少有这样的用法,是不是考虑下数据库结构的设计是否合理?或者最好在程序中实现,而非在SQL上。

    2009年10月8日 8:31
  • Peter.Tang 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌谢谢你的回复,也谢谢你的建议,我需要的是把11和22相加。返回结果
    2009年10月8日 9:14
  • create table TempTable(
    Num int not null,
    Total int not null
    )

    insert into TempTable values(11,12);
    insert into TempTable values(21,22);

    select
    ((select num tt from
    (select top 1 num from TempTable order by num asc) a)
    +
    (select total tt from
    (select top 1 total from TempTable order by total desc) b))

    2009年10月8日 10:09

全部回复

  • create table TempTable(
    Num int not null,
    Total int not null
    )

    insert into TempTable values(11,12);
    insert into TempTable values(21,22);

    select num tt from
    (select top 1 num from TempTable order by num asc) a
    Union
    select total tt from
    (select top 1 total from TempTable order by total desc) b

    LZ大兄,以上不知道是不是您要的。
    不过感觉您的这个需求怪怪的,我想一般很少有这样的用法,是不是考虑下数据库结构的设计是否合理?或者最好在程序中实现,而非在SQL上。

    2009年10月8日 8:31
  • Peter.Tang 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌谢谢你的回复,也谢谢你的建议,我需要的是把11和22相加。返回结果
    2009年10月8日 9:14
  • 你好 参考下面这段代码


    create table TempTable(
    Num int not null,
    Total int not null,
    id int primary key identity not null
    );

    insert into TempTable values(11,12);
    insert into TempTable values(21,22);

    declare @t table(rn int,Num int not null,Total int not null);
    insert into @t select ROW_NUMBER() over(order by id asc) as rn,Num,Total from TempTable;
    declare @num int,@total int;
    select @num=Num from @t where rn=1;
    select @total=Total from @t where rn=2;
    select @num+@total as result;


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年10月8日 9:35
  • create table TempTable(
    Num int not null,
    Total int not null
    )

    insert into TempTable values(11,12);
    insert into TempTable values(21,22);

    select
    ((select num tt from
    (select top 1 num from TempTable order by num asc) a)
    +
    (select total tt from
    (select top 1 total from TempTable order by total desc) b))

    2009年10月8日 10:09
  • --建立测试表
    create table TempTable(
    	Num int not null,
    	Total int not null,
    	id int primary key identity not null
    );
    --插入测试数据
    insert into TempTable values(11,12);
    insert into TempTable values(21,22);
    
    --查询结果
    select sum( 
    	case 
    	   when rn=1 then Num	--第1行第1列
    	   when rn=2 then total--第2行第2列 
    	else 0 
    	end )as YouTotal
    from (select row_number() over(order by id asc) as rn
    	,Num,Total 
          from TempTable
    	) A
    /*
    YouTotal
    -----------
    33
    
    (1 行受影响)
    */
    
    --清理
    drop table TempTable
    
    
    2009年10月9日 1:41
    版主
  • sql 里面的数据, 没有顺序的概念, 不同的执行走不同的执行计划, 出来的顺序不能保证, 所以楼主纯粹用行的概念去处理数据, 会有些问题, 没有辅助的排序, 有时候可能会得到你不想要的结果
    2009年10月9日 4:06