这样的数据怎么合并?急!!!

usxue 2006-05-29 03:18:10
数据:

id cardid datetime flag
21054 887765 04 20 2006 5:11PM 1
23552 887765 04 21 2006 2:09PM 0
21054 887765 04 23 2006 2:09PM 1
23552 887765 04 25 2006 2:09PM 0


合并成:
cardid time1 time2
887765 04 20 2006 5:11PM 04 21 2006 2:09PM
887765 04 23 2006 2:09PM 04 25 2006 2:09PM

谢谢各位了!!!
...全文
287 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
葫芦的世界 2006-05-30
  • 打赏
  • 举报
回复
程序太麻烦了.
paoluo 2006-05-29
  • 打赏
  • 举报
回复
...白忙活了。
usxue 2006-05-29
  • 打赏
  • 举报
回复
呵呵,谢谢paoluo兄了,我用程序搞定了!
呵呵
谢谢各位了
paoluo 2006-05-29
  • 打赏
  • 举报
回复
bloosh2005(普鲁士) ( ) 信誉:100 2006-05-29 16:37:00 得分: 0


就是第一行的FLAG=1的和第二行的FLAG=0的记录并起来,同样道理,第三行和第四行并起来


------------------------------------------------------
用行號來合併數據,不能算是規律,因為行號不能拿來直接用的。


借用一下臨時表吧。

Create Table TEST
(id Varchar(5),
cardid Varchar(6),
[datetime] DateTime,
flag Bit)
Insert TEST Select '21054', '887765', '04 20 2006 5:11PM', 1
Union All Select '23552', '887765', '04 21 2006 2:09PM', 0
Union All Select '21054', '887765', '04 23 2006 2:09PM', 1
Union All Select '23552', '887765', '04 25 2006 2:09PM', 0
GO
Select IID=Identity(Int,1,1),* Into #T From TEST

Select
cardid,
Max(Case When IID%2 =1 And flag=1 Then [datetime] End) As time1,
Max(Case When IID%2 =0 And flag=0 Then [datetime] End) As time2
From #T
Group By cardid, (IID-1)/2
GO
Drop Table TEST,#T
GO
--Result
/*
cardid time1 time2
887765 2006-04-20 17:11:00.000 2006-04-21 14:09:00.000
887765 2006-04-23 14:09:00.000 2006-04-25 14:09:00.000
*/
usxue 2006-05-29
  • 打赏
  • 举报
回复
真的没人知道?各位帮帮忙啊!
usxue 2006-05-29
  • 打赏
  • 举报
回复
如果实在不行的,我只能用程序搞定了。唉……
usxue 2006-05-29
  • 打赏
  • 举报
回复
就是根据flag的值。
如果flag的值为1,那么它的datetime为time1
如果flag的值为0,那么它的datetime为time2。
flag的值,正常情况应该是1,0,1,0,1,0,顺序应该是这个。
============
bloosh2005说的对啊
bloosh2005 2006-05-29
  • 打赏
  • 举报
回复
就是第一行的FLAG=1的和第二行的FLAG=0的记录并起来,同样道理,第三行和第四行并起来
zoutians 2006-05-29
  • 打赏
  • 举报
回复
题目再说明白点。
paoluo 2006-05-29
  • 打赏
  • 举报
回复
規律??
usxue 2006-05-29
  • 打赏
  • 举报
回复
各位,帮帮忙啊!
usxue 2006-05-29
  • 打赏
  • 举报
回复
to itblog:
不行啊,你的结果只有一条数据。
itblog 2006-05-29
  • 打赏
  • 举报
回复
select cardid,time1=max(case when flag=1 then [datetime] end),
time2=max(case when flag=0 then [datetime] end)
from 表
group by cardid
-狙击手- 2006-05-29
  • 打赏
  • 举报
回复
没看出什么规律
Coolyu0916 2006-05-29
  • 打赏
  • 举报
回复
select cardid ,min([datetime]) time1,max([datetime]) time2 from #tmp
group by cardid ,flag
usxue 2006-05-29
  • 打赏
  • 举报
回复
结果不对啊。怎办?
昵称被占用了 2006-05-29
  • 打赏
  • 举报
回复
用FLAG合并吗?

SELECT A.cardid,A.[datetime] AS TIME1,B.[datetime] AS TIME2
FROM TABLENAME A
LEFT JOIN TABLENAME B
ON A.cardid=B.cardid
AND A.FLAG=1
AND B.FLAG=0
AND B.[datetime]=(SELECT MIN([datetime]) FROM TABLENAME WHERE cardid=A.cardid AND FLAG=0)

34,838

社区成员

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

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