超级难题....高分奉上..

clxxj 2003-09-09 02:07:25
现有表tb1
-----------
id号 int
用户编号 int
日期 datetime
内容 nvarchar(2000)
-----------------
id 用户编号 日期 内容
1 001 2003-9-8 bbb
1 001 2003-9-9 ccc
1 001 2003-9-10 ddd
1 001 2003-9-11 eee
1 001 2003-9-12 aaa

如何生成新表 newtb

用户编号 星期一 星期二 星期三 星期四 星期五 星期六 星期日
001 bbb ccc ddd eee aaa --- ---
....

其他要求:
1.根据系统时间自动判断日期所在的周.
2.能实现上周和下周的翻动.
...全文
51 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-09-09
  • 打赏
  • 举报
回复
两个我都都写了,楼主为什么不仔细看贴?
yujohny 2003-09-09
  • 打赏
  • 举报
回复
1.你就把循环去掉,直接用这句
INSERT INTO Newtb
select yhid,
max(case when datepart(dw,rbrq)=2 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=3 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=4 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=5 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=6 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=7 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=1 then rbnr else '---' end)
from ribao where datepart(week,rbrq)=datepart(week,getdate())
group by yhid
2.不明白你说的意思,翻页???上面实现的不是吗?
pengdali 2003-09-09
  • 打赏
  • 举报
回复
CREATE TABLE Newtb(用户编号 NVARCHAR(3),星期一 NVARCHAR(200),
星期二 NVARCHAR(200),星期三 NVARCHAR(200),
星期四 NVARCHAR(200),星期五 NVARCHAR(200),
星期六 NVARCHAR(200),星期日 NVARCHAR(200),)
declare @MinWeek INT,@MaxWeek INT

select @MinWeek =datepart(week,min(rbrq)) from ribao
select @MaxWeek =datepart(week,max(rbrq)) from ribao


INSERT INTO Newtb
select yhid,
max(case when datepart(dw,rbrq)=2 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=3 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=4 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=5 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=6 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=7 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=1 then rbnr else '---' end)
from ribao group by yhid



SELECT * from Newtb
clxxj 2003-09-09
  • 打赏
  • 举报
回复
多谢老哥...还有以下几点不明白:
1.如何根据当前日期所在的周只显示本周,
2.如何象分页那样上下周翻动?
yujohny 2003-09-09
  • 打赏
  • 举报
回复
真是晕,套数据你都套错了,你怎么把日期全部用getdate(),应该用你的日期字段rbrq
把下面代码测试一下

CREATE TABLE Newtb(用户编号 NVARCHAR(3),星期一 NVARCHAR(200),
星期二 NVARCHAR(200),星期三 NVARCHAR(200),
星期四 NVARCHAR(200),星期五 NVARCHAR(200),
星期六 NVARCHAR(200),星期日 NVARCHAR(200),)
declare @MinWeek INT,@MaxWeek INT

select @MinWeek =datepart(week,min(rbrq)) from ribao
select @MaxWeek =datepart(week,max(rbrq)) from ribao

WHILE @MinWeek <=@MaxWeek
BEGIN
INSERT INTO Newtb
select yhid,
max(case when datepart(dw,rbrq)=2 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=3 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=4 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=5 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=6 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=7 then rbnr else '---' end),
max(case when datepart(dw,rbrq)=1 then rbnr else '---' end)
from ribao where datepart(week,rbrq) = @MinWeek group by yhid

SET @MinWeek = @MinWeek + 1
END

SELECT * from Newtb
condufei 2003-09-09
  • 打赏
  • 举报
回复
go
clxxj 2003-09-09
  • 打赏
  • 举报
回复
我这里的实际数据表 ribao
id yhid rbrq rbnr
59 1 9/6/2003 111
60 1 9/7/2003 222
61 2 9/8/2003 333
62 2 9/9/2003 444


测试语句:

CREATE TABLE Newtb(用户编号 NVARCHAR(3),星期一 NVARCHAR(200),
星期二 NVARCHAR(200),星期三 NVARCHAR(200),
星期四 NVARCHAR(200),星期五 NVARCHAR(200),
星期六 NVARCHAR(200),星期日 NVARCHAR(200),)
declare @MinWeek INT,@MaxWeek INT

select @MinWeek =datepart(week,min(getdate())) from ribao
select @MaxWeek =datepart(week,max(getdate())) from ribao

WHILE @MinWeek <=@MaxWeek
BEGIN
INSERT INTO Newtb
select yhbh,
max(case when datepart(dw,getdate())=2 then rbnr else '---' end),
max(case when datepart(dw,getdate())=3 then rbnr else '---' end),
max(case when datepart(dw,getdate())=4 then rbnr else '---' end),
max(case when datepart(dw,getdate())=5 then rbnr else '---' end),
max(case when datepart(dw,getdate())=6 then rbnr else '---' end),
max(case when datepart(dw,getdate())=7 then rbnr else '---' end),
max(case when datepart(dw,getdate())=1 then rbnr else '---' end)
from ribao where datepart(week,getdate()) = @MinWeek group by yhbh

SET @MinWeek = @MinWeek + 1
END

SELECT * from Newtb

得到的结果为:
yhbh 1 2 3 4 5 6 7
1 --- 444 --- --- --- --- ---
2 --- 444 --- --- --- --- ---
码视野 2003-09-09
  • 打赏
  • 举报
回复
up
clxxj 2003-09-09
  • 打赏
  • 举报
回复
我用你的得到的结果是对的,但一套用到我实际的表,就只能得出星期二的数据,快急死我拉.
ManagerMan 2003-09-09
  • 打赏
  • 举报
回复
使用交叉表
yujohny 2003-09-09
  • 打赏
  • 举报
回复
你把我的代码拷到查询分析器里面运行,当然首先保证你数据库里没有这两个表才行
看看得到的结果是不是对的
clxxj 2003-09-09
  • 打赏
  • 举报
回复
在我这边老是只得到星期二的数据,其他的都得不到!不知是为何?
clxxj 2003-09-09
  • 打赏
  • 举报
回复
sql2000
CCEO 2003-09-09
  • 打赏
  • 举报
回复
什么数据库先
yujohny 2003-09-09
  • 打赏
  • 举报
回复
我测试结果都出来了,还有不行???
那你要的结果???
clxxj 2003-09-09
  • 打赏
  • 举报
回复
你的我正在测试....好象不行...
yujohny 2003-09-09
  • 打赏
  • 举报
回复
楼主怎么不测试我的,
我的不行吗?
clxxj 2003-09-09
  • 打赏
  • 举报
回复
to 大力:
你的方法测试时提示case语法有错.

yujohny 2003-09-09
  • 打赏
  • 举报
回复
用上面的肯定行,测试结果如下
测试结果

用户编号 星期一 星期二 星期三 星期四 星期五 星期六 星期日
001 bbb ccc ddd eee aaa --- ---
001 aaaa bbbb --- cccc --- dddd ---
001 ffff gggg --- hhhh --- --- ---
yujohny 2003-09-09
  • 打赏
  • 举报
回复
CREATE TABLE tb1(ID INT,用户编号 NVARCHAR(3),日期 DATETIME,内容 NVARCHAR(200))
CREATE TABLE Newtb(用户编号 NVARCHAR(3),星期一 NVARCHAR(200),
星期二 NVARCHAR(200),星期三 NVARCHAR(200),
星期四 NVARCHAR(200),星期五 NVARCHAR(200),
星期六 NVARCHAR(200),星期日 NVARCHAR(200),)

INSERT tb1 values(1,'001','2003-9-8','bbb')
INSERT tb1 values(1,'001','2003-9-9','ccc')
INSERT tb1 values(1,'001','2003-9-10','ddd')
INSERT tb1 values(1,'001','2003-9-11','eee')
INSERT tb1 values(1,'001','2003-9-12','aaa')
INSERT tb1 values(1,'001','2003-9-15','aaaa')
INSERT tb1 values(1,'001','2003-9-16','bbbb')
INSERT tb1 values(1,'001','2003-9-18','cccc')
INSERT tb1 values(1,'001','2003-9-20','dddd')
INSERT tb1 values(1,'001','2003-9-22','ffff')
INSERT tb1 values(1,'001','2003-9-23','gggg')
INSERT tb1 values(1,'001','2003-9-25','hhhh')



declare @MinWeek INT,@MaxWeek INT

select @MinWeek =datepart(week,min(日期)) from tb1
select @MaxWeek =datepart(week,max(日期)) from tb1

WHILE @MinWeek <=@MaxWeek
BEGIN
INSERT INTO Newtb
select 用户编号,
max(case when datepart(dw,日期)=2 then 内容 else '---' end),
max(case when datepart(dw,日期)=3 then 内容 else '---' end),
max(case when datepart(dw,日期)=4 then 内容 else '---' end),
max(case when datepart(dw,日期)=5 then 内容 else '---' end),
max(case when datepart(dw,日期)=6 then 内容 else '---' end),
max(case when datepart(dw,日期)=7 then 内容 else '---' end),
max(case when datepart(dw,日期)=1 then 内容 else '---' end)
from tb1 where datepart(week,日期) = @MinWeek group by 用户编号

SET @MinWeek = @MinWeek + 1
END

SELECT * from Newtb

drop table tb1
drop table Newtb
加载更多回复(5)

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧