日期:2014-05-17  浏览次数:20775 次

上届小师妹问的问题,急,求救
有如下表结果
姓名      日期          数据
A       2012-10       90
B       2012-10       85
A       2012-11       120
C       2012-11       100
C       2012-10       60

要得到以下结果
如果每个人都有11月和10月的数据,就用11月减去上月的数据;如果某个人只有一个月数据,就不计算,必须两个月都有才计算。
A      30
C      40

请问用什么语句?
------最佳解决方案--------------------


引用:

牛人连图片都用上了。。。复制代码不省事么
------其他解决方案--------------------

--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([姓名] varchar(1),[日期] varchar(7),[数据] int)
insert [TB]
select 'A','2012-10',90 union all
select 'B','2012-10',85 union all
select 'A','2012-11',120 union all
select 'C','2012-11',100 union all
select 'C','2012-10',60

SELECT 
     A.[姓名]
     ,A.[数据]-B.[数据]  
from [TB] A
INNER JOIN TB B ON A.[姓名]=B.[姓名] and A.[日期]>B.[日期]
WHERE a.[日期]='2012-11' AND B.[日期]='2012-10'

/*
姓名   
---- -----------
A    30
C    40

(2 行受影响)


*/

DROP TABLE TB

------其他解决方案--------------------
select 姓名,SUM(case when 日期='2012-10' then 数据*-1 else 数据 end) as 数据和
from tablename
where 日期 in ('2012-10','2012-11')
group by 姓名
having COUNT(1)=2
------其他解决方案--------------------
select A.姓名,  数据 = B.数据 - A.数据
from 表 as A,表 as B
where A.姓名= B.姓名
and A.日期 ='2012-10'
and B.日期 ='2012-11'

------其他解决方案--------------------
小师妹?给个qq,我手把手教吧。你也剩了发帖的分。

上面的都写死了吧。不过算了,没必要搞那么大工程
------其他解决方案--------------------
引用:
小师妹?给个qq,我手把手教吧。你也剩了发帖的分。

上面的都写死了吧。不过算了,没必要搞那么大工程


色鬼,不过我喜欢
------其他解决方案--------------------
小师妹呢??
------其他解决方案--------------------
上届?小师妹?你对她干啥了......

------其他解决方案--------------------
null
------其他解决方案--------------------
null