首页 新闻 搜索 专区 学院

SQL 求和问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-08-15 10:20

SalaryOneDay  是每个人一天的 工资

点击刷新之后 将上面那个表的数据 按 名字 年份 月份  插入到  下面那个表中怎样插啊

select sum(SalaryOneDay) from [Classes] where CName='小明' 
  and CreateDate >'2012-08-01' and CreateDate <'2012-09-01'

问题是 日期怎样解决 啊!

问题补充:

我现在要做的是 将7月份的工资 和8月份的工资总和 加到另外一张表中

问题补充:

布洛克菲勒的主页 布洛克菲勒 | 菜鸟二级 | 园豆:255
提问于:2012-08-14 16:29
< >
分享
最佳答案
1

--使用group by 

select cname,left( convert(varchar(7),createdate,120),4), right(convert(varchar(7),createdate,120),2),sum(salaryOneDay) from #table
group by cname,convert(varchar(7),createdate,120)

 

--测试脚本

CREATE TABLE #table(
cid INT IDENTITY(1,1),
cname VARCHAR(16),
salaryOneDay INT,
createdate DATETIME
)

CREATE TABLE #table2(
cname VARCHAR(16),
salary INT,
years VARCHAR(4),
months varchar(2)
)


INSERT INTO #table ( cname, salaryOneDay, createdate ) VALUES ('小明',40,'2012-06-14')
INSERT INTO #table ( cname, salaryOneDay, createdate ) VALUES ('小明',30,'2012-07-14')
INSERT INTO #table ( cname, salaryOneDay, createdate ) VALUES ('小红',30,'2012-08-14')
INSERT INTO #table ( cname, salaryOneDay, createdate ) VALUES ('小红',40,'2012-08-14')


select cname,left( convert(varchar(7),createdate,120),4), right(convert(varchar(7),createdate,120),2),sum(salaryOneDay) from #table
group by cname,convert(varchar(7),createdate,120)

INSERT INTO #table2 ( cname, years, months, salary )
select cname,left( convert(varchar(7),createdate,120),4), right(convert(varchar(7),createdate,120),2),sum(salaryOneDay) from #table
group by cname,convert(varchar(7),createdate,120)

SELECT * FROM #table2

DROP TABLE #table
DROP TABLE #table2

收获园豆:15
acepro | 小虾三级 |园豆:1218 | 2012-08-14 16:49

你可能没明白我的意思

我要的不是数据库语句,是 一个解决方案

将7月份的工资 和8月份的工资总和 加到另外一张表中  但是 我的 CreateDate 怎样写成通用的方式

布洛克菲勒 | 园豆:255 (菜鸟二级) | 2012-08-14 16:55

@IT_ZZY: 如果7月 8月算成一个总和,你的日期采用什么方式保存?

建议增加字段使用 【工资开始时间】、【工资结束时间】,分别保存2个时间点。这样比较通用便利。

如果仅仅保存成下表的话,

select cname,left( convert(varchar(7),createdate,120),4), right(convert(varchar(7),createdate,120),2),sum(salaryOneDay) from 

[Classes]  where
CName='小明' 
  and CreateDate >'2012-08-01' and CreateDate <'2012-09-01'

group by cname,convert(varchar(7),createdate,120)  就可以了啊 ,分组统计。

acepro | 园豆:1218 (小虾三级) | 2012-08-14 17:07

@acepro:  我说的 7 月的 是一条数据 8月份的是一条数据! 上面我没说清楚!

布洛克菲勒 | 园豆:255 (菜鸟二级) | 2012-08-14 17:25

通过分组统计查询,将数据写到你数据表2里面

INSERT INTO 数据表2 ( cname, years, months, salary )
select cname,left( convert(varchar(7),createdate,120),4), right(convert(varchar(7),createdate,120),2),sum(salaryOneDay) from 数据表1
group by cname,convert(varchar(7),createdate,120)

然后再select * from 数据表2

 

acepro | 园豆:1218 (小虾三级) | 2012-08-14 18:22

@TigerSpringLiu:  往别的表 添加数据 我会了

但是 如果 我在工资 后面增加个 奖金 的列,你的查询 语句 就不能用了 啊

@acepro: n你是要把工资和奖金合并还是单独列出来?

select cname,left( convert(varchar(7),createdate,120),4), right(convert(varchar(7),createdate,120),2),sum(salaryOneDay)  as 工资,SUM('奖金字段名')  as 奖金SUM(‘奖金字段’+‘工资字段’) as 合计from 数据表1 where  CName='小明'   and CreateDate >'2012-08-01' and CreateDate <'2012-09-01'  group by cname,convert(varchar(7),createdate,120)

--建议楼主看下SQL的 group by ,SUM()  ,日期函数及convert转换函数 的语法及用法

 

acepro | 园豆:1218 (小虾三级) | 2012-08-15 09:05

@acepro:  恩,我Sql 基本功还是不行 啊!

布洛克菲勒 | 园豆:255 (菜鸟二级) | 2012-08-15 10:18
其他回答(3)
1

select b.CName N, Year(b.createDate) Y, Month(b.createDate) M,
(select sum(a.SalaryOneDay) from [Classes] a where a.CName = b.CName and Year(a.createDate)=Year(b.createDate) and Month(a.createDate) = Month(b.createDate))
from [Classes] b
group by b.CName,Year(b.createDate),Month(b.createDate)

 

测试脚本:

create table #temp0
(
cname nvarchar(50),
SalaryOneDay int,
createdate datetime
);

insert into #temp0
values('小明',50,'2012-07-01')
,('小明',50,'2012-07-01')
,('小明',50,'2012-08-01')
,('小兰',50,'2012-07-01')
,('小兰',50,'2012-08-01')
,('小兰',50,'2012-08-01')

select * from #temp0

select b.CName N, Year(b.createDate) Y, Month(b.createDate) M,
(select sum(a.SalaryOneDay) from #temp0 a where a.CName = b.CName and Year(a.createDate)=Year(b.createDate) and Month(a.createDate) = Month(b.createDate))
from #temp0 b
group by b.CName,Year(b.createDate),Month(b.createDate)

drop table #temp0

 

插入就很简单了吧

收获园豆:5
TigerSpringLiu | 园豆:196 (初学一级) | 2012-08-14 17:06

终于有人明白我的意思了

但是 查出来的是个临时表

 至于怎样插入数据 我还是不太明白

请大侠 给个思路!

支持(0) 反对(0) 布洛克菲勒 | 园豆:255 (菜鸟二级) | 2012-08-14 17:33

@IT_ZZY: 楼下的两位朋友的建议都蛮好

支持(0) 反对(0) TigerSpringLiu | 园豆:196 (初学一级) | 2012-08-14 20:11

@TigerSpringLiu:  往别的表 添加数据 我会了

但是 如果 我在工资 后面增加个 奖金 的列,你的查询 语句 就不能用了 啊

支持(0) 反对(0) 布洛克菲勒 | 园豆:255 (菜鸟二级) | 2012-08-14 22:42
1

直接建一个视图

牡丹 | 园豆:93 (初学一级) | 2012-08-14 17:11
1

不太明白LZ的意思,用 insert into select,或者select into 可以吗?

geass.. | 园豆:1701 (小虾三级) | 2012-08-14 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册