解决方案 »
- 属于查询问题
- 我现在的而要求是想把每个班级每个科目的学生打老师分数的前20%和后20%去掉,再算余下的各个科目的老师的平均得分
- 求优化,目前要5分钟才出结果,程序超时了,其中很多表都几十万数据。
- 求个简单的设计
- 如何获取一个库中的所有用户,并把该库中除系统用户外的用户增加到别一个库中
- delphi+ sqlserver 查找欠费用户的问题
- 请指教:我想脱离windows2003中文版,安装新的windows2008中文版和vs.net2008中文版,就是不知能带来哪些不便和冲突。我现在用的有VB6、水晶报表9.2,office2003中文版、SQL SERVER 2000+sp3a、Inst
- sql server2000数据库执行create table时连接中断
- update text类型字段问题?text对字符有限制吗?
- 在sqlserver表中间插入数据
- MS-SQL SERVER2000 UPDATE语句与自定义函数问题
- 请问如何更改MS SQL Service 2008 R2的默认安装路径?
select 员工编号, 月份 as 日期,天数1 as number from PBTEST
union all
select 员工编号, 月份 as 日期,天数2 as number from PBTEST
union all
select 员工编号, 月份 as 日期,天数2 as number from PBTEST
select 员工编号 , 月份 , numbers from PBTEST unpivot (numbers for 天数 in([天数1] , [天数2] , [天数3])) t
CREATE TABLE PBTEST
(
员工编号 nvarchar(20),
月份 nvarchar(30),
天数1 nvarchar(30),
天数2 nvarchar(30),
天数3 nvarchar(30)
)
insert into PBTEST select '001','2011/10/01','1','2','3'
insert into PBTEST select '002','2011/10/01','11','23','23'
insert into PBTEST select '003','2011/10/01','7','6','8'
go
select 员工编号,月份,天数1 from PBTEST
union all
select 员工编号,月份,天数2 from PBTEST
union all
select 员工编号,月份,天数3 from PBTEST order by 1
/*
员工编号 月份 天数1
-------------------- ------------------------------ ------------------------------
001 2011/10/01 1
001 2011/10/01 2
001 2011/10/01 3
002 2011/10/01 23
002 2011/10/01 23
002 2011/10/01 11
003 2011/10/01 7
003 2011/10/01 6
003 2011/10/01 8(9 行受影响)*/
go
drop table pbtest
CREATE TABLE PBTEST
(
员工编号 nvarchar(20),
月份 nvarchar(30),
天数1 nvarchar(30),
天数2 nvarchar(30),
天数3 nvarchar(30)
)
insert into PBTEST select '001','2011/10/01','1','2','3'
insert into PBTEST select '001','2011/10/02','4','5','6'
insert into PBTEST select '002','2011/10/02','11','23','23'
insert into PBTEST select '003','2011/10/03','7','6','8'declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 员工编号,月份,[numbers] = ' + quotename(Name) + ' from PBTEST'
from syscolumns
where name! = N'员工编号' and name! = N'月份' and ID = object_id('PBTEST')
order by colid asc
exec(@sql + ' order by 员工编号,月份')
002 2011/10/1 11
002 2011/10/2 23
月份里面天数要天数1,2,3为日期
应该 convert(char(8),月份,120)+'天数1,2这里需要substring()吧.我不知道怎么写了
CREATE TABLE PBTEST
(
员工编号 nvarchar(20),
月份 nvarchar(30),
天数1 nvarchar(30),
天数2 nvarchar(30),
天数3 nvarchar(30)
)
insert into PBTEST select '001','2011/10/01','1','2','3'
insert into PBTEST select '002','2011/10/01','11','23','23'
insert into PBTEST select '003','2011/10/01','7','6','8'
go
select 员工编号,月份,天数1 from PBTEST
union all
select 员工编号,convert(varchar(10),dateadd(d,1,月份),120),天数2 from PBTEST
union all
select 员工编号,convert(varchar(10),dateadd(d,2,月份),120),天数3 from PBTEST order by 1,2
/*
员工编号 月份 天数1
-------------------- ------------------------------ ------------------------------
001 2011/10/01 1
001 2011-10-02 2
001 2011-10-03 3
002 2011/10/01 11
002 2011-10-02 23
002 2011-10-03 23
003 2011/10/01 7
003 2011-10-02 6
003 2011-10-03 8(9 行受影响)*/
go
drop table pbtest
(
员工编号 nvarchar(20),
月份 nvarchar(30),
天数1 nvarchar(30),
天数2 nvarchar(30),
天数3 nvarchar(30)
)
insert into PBTEST select '001','2011/10/01','1','2','3'
insert into PBTEST select '002','2011/10/01','11','23','23'
insert into PBTEST select '003','2011/10/01','7','6','8'
go
select 员工编号,月份,天数1 from PBTEST
union all
select 员工编号,convert(varchar(10),dateadd(d,1,月份),111),天数2 from PBTEST
union all
select 员工编号,convert(varchar(10),dateadd(d,2,月份),111),天数3 from PBTEST order by 1,2
/*
员工编号 月份 天数1
-------------------- ------------------------------ ------------------------------
001 2011/10/01 1
001 2011/10/02 2
001 2011/10/03 3
002 2011/10/01 11
002 2011/10/02 23
002 2011/10/03 23
003 2011/10/01 7
003 2011/10/02 6
003 2011/10/03 8(9 行受影响)*/
go
drop table pbtest
直接
CREATE TABLE PBTEST
(
员工编号 nvarchar(20),
日期 datetime,
天数1 int
)
多好!
能省去一大堆麻烦.
goCREATE TABLE PBTEST
(
员工编号 nvarchar(20),
月份 nvarchar(30),
天数1 nvarchar(30),
天数2 nvarchar(30),
天数3 nvarchar(30)
)
insert into PBTEST select '001','2011/10/01','1','2','3'
insert into PBTEST select '002','2011/10/01','11','23','23'
insert into PBTEST select '003','2011/10/01','7','6','8'
go
select
员工编号,
月份=DATEADD(dd,cast(stuff(Cols,1,2,'')as int)-1,月份),
numbers
from PBTEST
unpivot (numbers for Cols in([天数1],[天数2],[天数3])) as b/*
员工编号 月份 numbers
001 2011-10-01 00:00:00.000 1
001 2011-10-02 00:00:00.000 2
001 2011-10-03 00:00:00.000 3
002 2011-10-01 00:00:00.000 11
002 2011-10-02 00:00:00.000 23
002 2011-10-03 00:00:00.000 23
003 2011-10-01 00:00:00.000 7
003 2011-10-02 00:00:00.000 6
003 2011-10-03 00:00:00.000 8
*/
在
CREATE TABLE PBTEST
(
员工编号 nvarchar(20),
日期 datetime,
天数1 int
)
这样的表上,要按月操作是很简单的事情,只要 where 日期 between 'XXXX-XX-01' and 'XXXX-XX-30' 不就可以了嘛.
用户要对每月每天设置一个值.