--使用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
你可能没明白我的意思
我要的不是数据库语句,是 一个解决方案
将7月份的工资 和8月份的工资总和 加到另外一张表中 但是 我的 CreateDate 怎样写成通用的方式
@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: 我说的 7 月的 是一条数据 8月份的是一条数据! 上面我没说清楚!
通过分组统计查询,将数据写到你数据表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
@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: 恩,我Sql 基本功还是不行 啊!
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
插入就很简单了吧
终于有人明白我的意思了
但是 查出来的是个临时表
至于怎样插入数据 我还是不太明白
请大侠 给个思路!
@IT_ZZY: 楼下的两位朋友的建议都蛮好
@TigerSpringLiu: 往别的表 添加数据 我会了
但是 如果 我在工资 后面增加个 奖金 的列,你的查询 语句 就不能用了 啊
直接建一个视图
不太明白LZ的意思,用 insert into select,或者select into 可以吗?