高分求救,不够可再另给!急!急!!关于SQL语句的问题!

malionsw 2003-09-26 03:41:28
我要从一个表中查询数据
表结构如下:
姓 名 日期 时间1 时间2
张三 2003-9-4 8:00:01 11:00:30
李四 2003-9-4 8:00:10 12:00:00
张三 2003-9-5 8:10:10 11:30:25

我需要能够根据这张表得到如下的表结构:
姓名 日期1 日期2 日期3 日期1时间1 日期2时间1 ...
张三 2003-9-4 2003-9-5 2003-9-6 8:00:01 8:10:10 ...
李四 2003-9-4 2003-9-5 2003-9-6 8:00:10 ......

能否通过SQL语句实现?谢谢!
...全文
46 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
8water 2003-10-19
  • 打赏
  • 举报
回复
rm
malionsw 2003-09-29
  • 打赏
  • 举报
回复
搞定了,具体方法可参考wdsimon(老王(路漫漫其修远兮,吾将上下而求索)) 的
如果要实现记录的合并还需要在case语句前面使用max函数
谢谢各位
具体实现方法如下:
如果确定取那三天,CASE如下:
select 姓名,Max(case when 日期='2003-09-4' then 日期 end) as 日期1,
Max(case when 日期='2003-09-5' then 日期 end) as 日期2,
Max(case when 日期='2003-09-6' then 日期 end) as 日期3,
Max(case when 日期='2003-09-4' then 时间1 end) as 日期1时间1,
Max(case when 日期='2003-09-5' then 时间1 end) as 日期2时间1,
Max(case when 日期='2003-09-6' then 时间1 end) as 日期3时间1,
Max(case when 日期='2003-09-4' then 时间2 end) as 日期1时间2,
Max(case when 日期='2003-09-5' then 时间2 end) as 日期2时间2,
Max(case when 日期='2003-09-6' then 时间2 end) as 日期3时间2,
from yourtable
group by 姓名

再次谢谢大家的帮忙,结贴
「已注销」 2003-09-27
  • 打赏
  • 举报
回复
//找到最大列数
select 姓名,count(姓名) as mycount
into #mytemp
from 表
group by 姓名

select 姓名,max(mycount)
from #mytemp
//下面用游标遍历#mytemp,并从刚才的表中取数,然后形成到新表中
wdsimon 2003-09-27
  • 打赏
  • 举报
回复
如果确定取那三天,CASE如下:
select 姓名,(case when 日期='2003-09-4' then 日期 end) as 日期1,
(case when 日期='2003-09-5' then 日期 end) as 日期2,
(case when 日期='2003-09-6' then 日期 end) as 日期3,
(case when 日期='2003-09-4' then 时间1 end) as 日期1时间1,
(case when 日期='2003-09-5' then 时间1 end) as 日期2时间1,
(case when 日期='2003-09-6' then 时间1 end) as 日期3时间1,
(case when 日期='2003-09-4' then 时间2 end) as 日期1时间2,
(case when 日期='2003-09-5' then 时间2 end) as 日期2时间2,
(case when 日期='2003-09-6' then 时间2 end) as 日期3时间2,
from yourtable
group by 姓名
「已注销」 2003-09-27
  • 打赏
  • 举报
回复
一条SQL语句恐怕很难实现,Case语句肯定解决不了,因为列数也是不固定的。
以下给出基本思路
1.先形成列,找出刷卡次数最多的人
2.形成临时表
3.遍历表,插入记录到临时表
wdsimon 2003-09-27
  • 打赏
  • 举报
回复
确实是姓名记录数未定,case解决不了问题;
wdsimon 2003-09-27
  • 打赏
  • 举报
回复
确实是三级路数未定,case解决不了问题;
dickeybird888 2003-09-27
  • 打赏
  • 举报
回复
不知道如何做帮助你up
dickeybird888 2003-09-27
  • 打赏
  • 举报
回复
不知道如何做,帮助你UP
malionsw 2003-09-27
  • 打赏
  • 举报
回复
自己试了几次
也查找了一些资料
可惜还是没有能够解决问题
wangl() 您说的用CASE实现,可是我不知道如何下手啊
Server的例子里面也没有提到,能帮帮我吗?
十分感谢!
malionsw 2003-09-27
  • 打赏
  • 举报
回复
谢谢各位帮忙!
我使用的是SQL Server2000,我试过用CASE来处理数据统计等,但是没有用过处理记录压缩
我先试试可不可以,谢谢大家啊!
yown 2003-09-26
  • 打赏
  • 举报
回复
这是多条记录压缩的问题,以前有先例,不妨找找!
wangl 2003-09-26
  • 打赏
  • 举报
回复
数据库用什么,Oracle还是SqlServer?
Oracle,用Decode函数
SqlServer,用CASE函数。
Oracle举例如下:

Table如下:Test
Name Month Money
a 1 100
a 2 200
a 3 300

想得到如下的结果,
Name 1月 2月 3月
a 100 200 300

Sql这样写:
select Name, decode(Month,1,Money) 1月,decode(Month,2,Money) 2月,decode(Month,3,Money) 3月
from Test
malionsw 2003-09-26
  • 打赏
  • 举报
回复
okgxs(一叶风铃) ,
就是说,我原来的表中是对每个人、每天都会产生一条记录
但是我想要将几条记录(也就是几天的记录)合并成一条记录(按人名进行合并)
malionsw 2003-09-26
  • 打赏
  • 举报
回复
先谢谢 fyje(云中仙) 大侠
如果我指定了要取的记录数,是否能够实现?
比如我假定要取3天的数据
okgxs 2003-09-26
  • 打赏
  • 举报
回复
老大你所详细点:!!!
姓名 日期1 日期2?? 日期3?? 日期1时间1 ?? 日期2时间1 ??...
张三 2003-9-4 2003-9-5 2003-9-6 8:00:01 8:10:10 ...
李四 2003-9-4 2003-9-5 2003-9-6 8:00:10 ......

????//这都是干吗的?说明白了
fyje 2003-09-26
  • 打赏
  • 举报
回复
这个就不容易实现了,因为你的表中的张三记录数不定
fyje 2003-09-26
  • 打赏
  • 举报
回复
这个就不容易实现了,因为你的表中的张三级路数不定

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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