SQL查询语句

cfd406635982 2010-11-22 04:53:51
一般的sql列转化为行,都是用了sum等求和函数。我现在的其中有些是不用求和的。。
我现在机器上没有装mysql。。但是下面的语句在sqlserver2005下能行。。


DYN_VECHILE表
FLIGHT_NO,START_TIME,END_TIME,VECHILE_ID,VECHILE_NUM
1 10:20 10:23 10 2
1 10:25 10:30 20 3
1 11:20 11:23 30 0
1 13:27 13:33 40 5
1 15:30 15:43 50 8
2 19:27 19:33 10 6
2 23:27 23:33 20 2
2 18:27 18:33 30 1



SELECT FLIGHT_NO,
(SELECT START_TIME FROM DYN_VECHILE v1 WHERE VECHILE_ID=10 AND v1.FLIGHT_NO = v.FLIGHT_NO) AS '10Begin',
(SELECT END_TIME FROM DYN_VECHILE v2 WHERE VECHILE_ID=10 AND v2.FLIGHT_NO = v.FLIGHT_NO) AS '10END',
(SELECT START_TIME FROM DYN_VECHILE v3 WHERE VECHILE_ID=20 AND v3.FLIGHT_NO = v.FLIGHT_NO) AS '20Begin',
(SELECT END_TIME FROM DYN_VECHILE v4 WHERE VECHILE_ID=20 AND v4.FLIGHT_NO = v.FLIGHT_NO) AS '20END',
SUM(CASE VECHILE_ID WHEN 30 THEN VECHILE_NUM ELSE 0 END) AS '30Times',
SUM(CASE VECHILE_ID WHEN 40 THEN VECHILE_NUM ELSE 0 END) AS '40Times'
FROM
DYN_VECHILE v
GROUP BY
FLIGHT_NO



但是用了太多的子查询嵌套了 。。
能不能用什么写法来代替这个功能呢? 
主要是在sqlserver上。。
(SELECT START_TIME FROM DYN_VECHILE v1 WHERE VECHILE_ID=10 AND v1.FLIGHT_NO = v.FLIGHT_NO) AS '10Begin',
这个我觉得有点多余了
我想这种写法不是很好。代码太多了。谢谢谢了 。。
...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
daodaoyu222 2010-11-22
  • 打赏
  • 举报
回复
楼上两位大师。。
ACMAIN_CHM 2010-11-22
  • 打赏
  • 举报
回复
select FLIGHT_NO,
Max(IF(VECHILE_ID=10,START_TIME,null)) as `10Begin`,
max(if(VECHILE_ID=10,END_TIME,null)) as `10END`,
max(if(VECHILE_ID=20,START_TIME,null)) as `20Begin`,
max(if(VECHILE_ID=20,END_TIME,null)) AS `20END`,
Sum(IF(VECHILE_ID=30,VECHILE_NUM,null)) as `30Times`,
sum(if(VECHILE_ID=40,VECHILE_NUM,null)) as `40Times`
from DYN_VECHILE
group By FLIGHT_NO
zuoxingyu 2010-11-22
  • 打赏
  • 举报
回复
这里是MYSQL版。MYSQL和MSSQL的语法有一定的差别。

你要精简代码,可以用CASE 语句去匹配。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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