求解这个SQL语句错在哪里?语法没有错误,但所求结果却不对

qq_40135950 2018-07-19 10:21:24
我的目的是要统计出始发站为莫斯科,终点站为哈尔滨的车次中所有下车站序号大于莫斯科站序号的车票数量以及相应的车次信息,说白了就是统计出当前各车次能在莫斯科站购买的车票余量,这个查询结果明显不对的,求解应该怎么修改,谢谢各位大神了!其中TN是车次信息表,stop是车次停靠站信息表,ticket是车票表,不能更改表,因为表是老师规定好的
...全文
238 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-07-24
  • 打赏
  • 举报
回复
引用 12 楼 qq_40135950 的回复:
[quote=引用 8 楼 sinat_28984567 的回复:]
建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

这样也许有点困难,我没有用这些sql语句来建表和插入数据[/quote]

或者你就这样给
源数据:
id name
1 张三
2 李四

想要的结果
names
张三,李四
二月十六 2018-07-23
  • 打赏
  • 举报
回复
建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
qq_40135950 2018-07-23
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
[quote=引用 3 楼 qq_40135950 的回复:]
[quote=引用 2 楼 sinat_28984567 的回复:]
建议楼主给出测试数据和测试数据想要的对应结果,别贴图,看不清楚。

这样?
select TN.车次,日期,类别,始发站,终点站,硬座价格*t1.序号-硬座价格*t2.序号 as '硬座价格',count(ticketid)
from TN,stop t1,stop t2,stop,ticket a1
where TN.车次 in
(select 车次 from stop where getdate='1945/8/8' and TN.车次 in
(select a.车次
from stop a,stop b where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 ))
and t1.sname='哈尔滨' and t2.sname='莫斯科'
and t2.车次 in
(select a.车次
from stop a,stop b
where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 )
and t1.车次 in
(select a.车次
from stop a,stop b
where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 )
and t1.车次=TN.车次 and t2.车次 = TN.车次 and a1.车次 =t2.车次
and a1.下车站名称= stop.sname
and stop.序号>t2.序号
group by TN.车次,日期,类别,始发站,终点站,硬座价格*t1.序号-硬座价格*t2.序号
想要的结果为:
车次 日期 类型 始发站 终点站 票价 数量
k-25 1945/8/8 装甲列车 莫斯科 哈尔滨 300 3
T-26 1945/8/8 特慢 莫斯科 哈尔滨 15 3[/quote]

原始数据什么样的?[/quote]
抱歉,我没太明白您说的原始数据是啥,是数据库中各表的数据吗?
qq_40135950 2018-07-23
  • 打赏
  • 举报
回复
引用 4 楼 RINK_1 的回复:
“始发站为莫斯科,终点站为哈尔滨的车次中所有下车站序号大于莫斯科站序号的车票数量以及相应的车次信息”,始发站位莫斯科的车次下的车票中,难道还有下车站序号小于等于莫斯科站序号的车票?

“当前各车次能在莫斯科站购买的车票余量”,如何算能在莫斯科站购买的车票,除了车票的始发站是莫斯科的车票外,始发站是莫斯科、终点站是哈尔滨的车次下,登车的始发站是路线中某一中途车站的车票算满足条件吗?

那个序号主要是为了区分莫斯科到哈尔滨的车次和哈尔滨到莫斯科的车次,以及到站的先后顺序,我要计算该车次中下车车站的序号大于莫斯科站的票数就是为了计算莫斯科站可购买的车票余量
吉普赛的歌 2018-07-23
  • 打赏
  • 举报
回复
引用 12 楼 qq_40135950 的回复:
[quote=引用 8 楼 sinat_28984567 的回复:]
建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

这样也许有点困难,我没有用这些sql语句来建表和插入数据[/quote]
你把你这个数据库备份或分离, 打包保存在百度网盘上, 然后分享出来就可以了。
反正只是学习库,不怕的。
qq_40135950 2018-07-23
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

这样也许有点困难,我没有用这些sql语句来建表和插入数据
qq_40135950 2018-07-23
  • 打赏
  • 举报
回复
引用 9 楼 RINK_1 的回复:
[quote=引用 6 楼 qq_40135950 的回复:]
[quote=引用 4 楼 RINK_1 的回复:]
“始发站为莫斯科,终点站为哈尔滨的车次中所有下车站序号大于莫斯科站序号的车票数量以及相应的车次信息”,始发站位莫斯科的车次下的车票中,难道还有下车站序号小于等于莫斯科站序号的车票?

“当前各车次能在莫斯科站购买的车票余量”,如何算能在莫斯科站购买的车票,除了车票的始发站是莫斯科的车票外,始发站是莫斯科、终点站是哈尔滨的车次下,登车的始发站是路线中某一中途车站的车票算满足条件吗?

那个序号主要是为了区分莫斯科到哈尔滨的车次和哈尔滨到莫斯科的车次,以及到站的先后顺序,我要计算该车次中下车车站的序号大于莫斯科站的票数就是为了计算莫斯科站可购买的车票余量[/quote]

你这业务逻辑有些不合理,怎么是按序号来区分莫斯科到哈尔滨和哈尔滨到莫斯科的,按理方向不同,车次应该也不同的。那你不仅要判断下车车站,还要判断上车车站了,否则没法确认到底是莫斯科出发的还是哈尔滨出发的。比如,下车车站是海参崴,到底是莫斯科到海参崴的还是哈尔滨到海参崴的。[/quote]
在同一车次下,上车车站不需要判断吧,只要将总的座位数量减去卖出的票的下车车站是当前车站之后的车站的票数,就是当前车站的可购买的座位余量
weixin_41696388 2018-07-23
  • 打赏
  • 举报
回复
嗯,业务逻辑定义没有很严谨,会select到很多奇怪的数据
RINK_1 2018-07-23
  • 打赏
  • 举报
回复
引用 6 楼 qq_40135950 的回复:
[quote=引用 4 楼 RINK_1 的回复:] “始发站为莫斯科,终点站为哈尔滨的车次中所有下车站序号大于莫斯科站序号的车票数量以及相应的车次信息”,始发站位莫斯科的车次下的车票中,难道还有下车站序号小于等于莫斯科站序号的车票? “当前各车次能在莫斯科站购买的车票余量”,如何算能在莫斯科站购买的车票,除了车票的始发站是莫斯科的车票外,始发站是莫斯科、终点站是哈尔滨的车次下,登车的始发站是路线中某一中途车站的车票算满足条件吗?
那个序号主要是为了区分莫斯科到哈尔滨的车次和哈尔滨到莫斯科的车次,以及到站的先后顺序,我要计算该车次中下车车站的序号大于莫斯科站的票数就是为了计算莫斯科站可购买的车票余量[/quote] 你这业务逻辑有些不合理,怎么是按序号来区分莫斯科到哈尔滨和哈尔滨到莫斯科的,按理方向不同,车次应该也不同的。那你不仅要判断下车车站,还要判断上车车站了,否则没法确认到底是莫斯科出发的还是哈尔滨出发的。比如,下车车站是海参崴,到底是莫斯科到海参崴的还是哈尔滨到海参崴的。
RINK_1 2018-07-19
  • 打赏
  • 举报
回复
“始发站为莫斯科,终点站为哈尔滨的车次中所有下车站序号大于莫斯科站序号的车票数量以及相应的车次信息”,始发站位莫斯科的车次下的车票中,难道还有下车站序号小于等于莫斯科站序号的车票? “当前各车次能在莫斯科站购买的车票余量”,如何算能在莫斯科站购买的车票,除了车票的始发站是莫斯科的车票外,始发站是莫斯科、终点站是哈尔滨的车次下,登车的始发站是路线中某一中途车站的车票算满足条件吗?
qq_40135950 2018-07-19
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
建议楼主给出测试数据和测试数据想要的对应结果,别贴图,看不清楚。

这样?
select TN.车次,日期,类别,始发站,终点站,硬座价格*t1.序号-硬座价格*t2.序号 as '硬座价格',count(ticketid)
from TN,stop t1,stop t2,stop,ticket a1
where TN.车次 in
(select 车次 from stop where getdate='1945/8/8' and TN.车次 in
(select a.车次
from stop a,stop b where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 ))
and t1.sname='哈尔滨' and t2.sname='莫斯科'
and t2.车次 in
(select a.车次
from stop a,stop b
where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 )
and t1.车次 in
(select a.车次
from stop a,stop b
where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 )
and t1.车次=TN.车次 and t2.车次 = TN.车次 and a1.车次 =t2.车次
and a1.下车站名称= stop.sname
and stop.序号>t2.序号
group by TN.车次,日期,类别,始发站,终点站,硬座价格*t1.序号-硬座价格*t2.序号
想要的结果为:
车次 日期 类型 始发站 终点站 票价 数量
k-25 1945/8/8 装甲列车 莫斯科 哈尔滨 300 3
T-26 1945/8/8 特慢 莫斯科 哈尔滨 15 3
二月十六 2018-07-19
  • 打赏
  • 举报
回复
建议楼主给出测试数据和测试数据想要的对应结果,别贴图,看不清楚。
qq_40135950 2018-07-19
  • 打赏
  • 举报
回复
现在是没人么?
二月十六 2018-07-19
  • 打赏
  • 举报
回复
引用 3 楼 qq_40135950 的回复:
[quote=引用 2 楼 sinat_28984567 的回复:]
建议楼主给出测试数据和测试数据想要的对应结果,别贴图,看不清楚。

这样?
select TN.车次,日期,类别,始发站,终点站,硬座价格*t1.序号-硬座价格*t2.序号 as '硬座价格',count(ticketid)
from TN,stop t1,stop t2,stop,ticket a1
where TN.车次 in
(select 车次 from stop where getdate='1945/8/8' and TN.车次 in
(select a.车次
from stop a,stop b where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 ))
and t1.sname='哈尔滨' and t2.sname='莫斯科'
and t2.车次 in
(select a.车次
from stop a,stop b
where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 )
and t1.车次 in
(select a.车次
from stop a,stop b
where a.车次=b.车次 and a.sname = '哈尔滨' and b.sname = '莫斯科' and a.序号>b.序号 )
and t1.车次=TN.车次 and t2.车次 = TN.车次 and a1.车次 =t2.车次
and a1.下车站名称= stop.sname
and stop.序号>t2.序号
group by TN.车次,日期,类别,始发站,终点站,硬座价格*t1.序号-硬座价格*t2.序号
想要的结果为:
车次 日期 类型 始发站 终点站 票价 数量
k-25 1945/8/8 装甲列车 莫斯科 哈尔滨 300 3
T-26 1945/8/8 特慢 莫斯科 哈尔滨 15 3[/quote]

原始数据什么样的?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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