| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3213 人关注过本帖
标题:求 帐龄分析SQL语句
只看楼主 加入收藏
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
下次的机会来了

问题:
另外一个表为
TB_2
名称   描述
张三   大学
王二   中学
马六   小学

现在要在干才那个表的基础上,加上 描述 字段:

名称  描述       三个月以内       三个月到一年      一年以上        合计         
---------- ----------- ----------- ----------- -----------
马六  小学       150         0           0           150
王五  中学       0           0           900         900
张三  大学       200         100         400         700

2007-11-30 11:20
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
我在后面加上
   ...Tb_2.描述.... LEFT JOIN Tb_2  ON Tb.名称=Tb_2.名称

提示语法错误

2007-11-30 11:22
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
declare @t table(名称 varchar(10),时间 datetime,金额 int)
insert @t select '张三','2007-1-1',100
union all select '张三','2007-10-30',200
union all select '张三','2006-5-12',400
union all select '马六','2007-11-5',150
union all select '王五','2005-10-1',900

declare @t2 table(名称 varchar(10),描述 varchar(10))
insert @t2 select '张三','大学'
union all select '王五','中学'
union all select '马六','小学'

select a.名称,b.描述,a.[三个月以内],a.[三个月到一年],a.[一年以上],a.[合计]
from
(
    select 名称,
        [三个月以内]=sum(case when datediff(month,时间,getdate())<=3 then 金额 else 0 end),
        [三个月到一年]=sum(case when datediff(month,时间,getdate())>3 and datediff(month,时间,getdate()) <=12 then 金额 else 0 end),
        [一年以上]=sum(case when datediff(month,时间,getdate())>12 then 金额 else 0 end),
        [合计]=sum(金额)
    from @t
    group by 名称
) a
left join @t2 b
on a.名称=b.名称
order by a.名称

/*
名称         描述         三个月以内       三个月到一年      一年以上        合计         
---------- ---------- ----------- ----------- ----------- -----------
马六         小学         150         0           0           150
王五         中学         0           0           900         900
张三         大学         200         100         400         700

(所影响的行数为 3 行)
*/

我的msn: myfend@
2007-11-30 11:29
XieLi
Rank: 1
等 级:新手上路
威 望:1
帖 子:762
专家分:0
注 册:2007-7-24
收藏
得分:0 
给你啦!

拥有蓝天的白云,拥有你的我.
2007-11-30 11:36
jockey
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:977
专家分:52
注 册:2005-12-4
收藏
得分:0 
感谢两位!
我发现个问题:

select 名称,编号, [三个月以内]=sum(case when datediff(month,时间,getdate())<=3 then 金额 else 0 end) from Tb group by 名称

就要出错!
而去掉 编号
可以正常,也就是group by 只允许 一个字段

2007-11-30 13:12
XieLi
Rank: 1
等 级:新手上路
威 望:1
帖 子:762
专家分:0
注 册:2007-7-24
收藏
得分:0 
select 名称,编号, [三个月以内]=sum(case when datediff(month,时间,getdate())<=3 then 金额 else 0 end) from Tb group by 名称,编号

去帮助里查一下GROUP BY 的用法

拥有蓝天的白云,拥有你的我.
2007-11-30 13:33
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
这是Group by 句法的问题...
同意楼上说在帮助查一下..

但是你这种句法.
select 名称,编号, [三个月以内]=sum(case when datediff(month,时间,getdate())<=3 then 金额 else 0 end) from Tb group by 名称

...在SQL2003标准中是可以的.因为它会自动查找函数依赖..
但是现在还没有数据库产品支持SQL2003标准.

我的msn: myfend@
2007-11-30 14:19
XieLi
Rank: 1
等 级:新手上路
威 望:1
帖 子:762
专家分:0
注 册:2007-7-24
收藏
得分:0 
SQL2003没用过呢?
现在不是有SQL2005吗好用吗?

拥有蓝天的白云,拥有你的我.
2007-11-30 14:25
缘吇弹
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:43
帖 子:3038
专家分:27
注 册:2007-7-2
收藏
得分:0 
哈哈。。。SQL区因你们而活跃啊。

Repeat  Life=Study;Until (death);
2007-11-30 14:34
缘吇弹
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:43
帖 子:3038
专家分:27
注 册:2007-7-2
收藏
得分:0 
原帖由 [bold][underline]XieLi[/underline][/bold] 于 2007-11-30 14:25 发表 [url=http://bbs.][/url]
SQL2003没用过呢?
现在不是有SQL2005吗好用吗?

我也没用过。

Repeat  Life=Study;Until (death);
2007-11-30 14:35
快速回复:求 帐龄分析SQL语句
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045562 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved