求助求助sql sever 2008,

一张表有三个字段: id,carId,runKm

根据相同的carId 计算 由id依次从大到小的 runKm 的差。
如: 1,1,3;
2,3,8 ;
3,1,5 ;

3,3,7 ;
4,2,8 ,
5,1,9
那么求得 carId 为1 的差为:2和4 carId 为2的差 为8;carid为 3 的差为-1
想 问一下用sql应该怎么写?

sql

5个回答

你这毫无规律,没看出来carId=1的时候是2和4,,carId为2的时候是8,为3的时候是-1,这些都怎么计算出来的。

没看懂你要表达什么!

就我所知,sql sever 里只能添加删除更改查询记录,没办法计算.要计算必须借助编程语言.
步骤大概如下:先查询carId为某值的记录,并按id从大到小排序,这样得到一个记录集;
从记录集中取出runKm值进行计算,结果保存到一个数组里


-- Author :fredrickhu(小F,向高手学习)
-- Date :2015-01-30 15:28:13
-- Verstion:
-- Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
-- Feb 10 2012 19:39:15
-- Copyright (c) Microsoft Corporation

-- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)


--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table tb
insert [tb]
select 1,1,3 union all
select 2,3,8 union all
select 3,1,5 union all
select 3,3,7 union all
select 4,2,8 union all
select 5,1,9
--------------开始查询--------------------------
;WITH f AS
(
SELECT ,px=ROW_NUMBER()OVER(PARTITION BY carid ORDER BY id) FROM TB
)
SELECT a.carid,ISNULL(b.runkm,0)-ISNULL(a.runkm,0) AS runkm FROM f AS a INNER JOIN f AS b ON a.px=b.px-1 AND a.carid=b.carid
UNION ALL
SELECT carid,0 AS runkm FROM f WHERE carid IN(SELECT carid FROM f GROUP BY carid HAVING COUNT(1)=1)
ORDER BY carid
----------------结果----------------------------
/
carid runkm


1 2
1 4
2 0
3 -1

(4 行受影响)

*/

不知道楼主是不是这个意思 如果不是 请说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐