Foxtable(狐表)用户栏目专家坐堂 → 求教,这样的SQL查询语句如何实现?


  共有10760人关注过本帖树形打印复制链接

主题:求教,这样的SQL查询语句如何实现?

帅哥哟,离线,有人找我吗?
baoxyang
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
求教,这样的SQL查询语句如何实现?  发帖心情 Post By:2012/3/27 16:13:00 [只看该作者]

表A和表B,查询表A表B列所有订单号相同的记录,表A为主表,表B为子表,其中表B中为最后一条记录(多条记录时)。请指点!

 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2012/3/27 17:26:00 [只看该作者]

如上图,子表中“托运预约”中相同托运单号有对应多条记录,主表“托运单据”表中托运单号是唯一的。我想得到是相同托运单号只显示一条记录及子表显示列内容为最近一条记录。

图示查询语句应如何修改,请高手指点!!


图片点击可在新窗口打开查看此主题相关图片如下:未命名.gif
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2012/3/27 17:44:00 [只看该作者]

例如:

表A                  表B

列1   列2           列1    列3

1      a              1        f

2      b              1       g

3      c              2        h

4      D             2        j

 

我想显示的结果是

列1   列2     列3

1       a        g     (表B中符合条件的最后一条记录)

2       b        j      (表B中符合条件的最后一条记录)

3       c        ""

4       D       ""

请问这个SQL语句如何实现?请指点!!先谢了!!

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/27 18:15:00 [只看该作者]

这个我不会,你去csdn的sql server论坛问问看看,哪里高手比较多。

 回到顶部
帅哥哟,离线,有人找我吗?
SQL2011
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:284 威望:0 精华:0 注册:2012/2/24 19:31:00
  发帖心情 Post By:2012/3/27 18:58:00 [只看该作者]

如果使用Sql server 2005 以后的版本 作为外部数据源,写个视图就可以了

 

select a.seqno,a.col01,Rs.col01,rs.col02,rs.seqno from

A

left join

(SELECT b.col01,b.col02,b.seqno,

ROW_NUMBER() OVER (PARTITION BY b.col01 ORDER BY b.seqno desc) AS RowID

 FROM B )rs

on a.seqno=rs.col01 and rs.Rowid=1


 回到顶部
帅哥哟,离线,有人找我吗?
baoxyang
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2012/3/28 0:23:00 [只看该作者]

我这是SQL 2000 版本的不支持以上ROW_NUMBER() ,请问下在SQL 2000,多谢了!


 回到顶部
帅哥哟,离线,有人找我吗?
SQL2011
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:284 威望:0 精华:0 注册:2012/2/24 19:31:00
  发帖心情 Post By:2012/3/28 6:23:00 [只看该作者]

SQL 2000 下的方法比较繁琐一些,速度也可能比较慢。

 

 

select a.seqno,a.col01,Rs.col01,rs.col02,rs.seqno

from A

left join

(

select

(select count(*) from B as B2 where B2.Seqno>=B1.seqno and b1.COL01=b2.col01 ) as RowID

, B1.seqno,b1.COL01,b1.col02

from B as B1

) rs

on a.seqno=rs.col01 and rs.Rowid=1


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6886 积分:43605 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/3/28 7:48:00 [只看该作者]

SQL2011兄:

 

Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)

 

想变成

姓名      语文      数学      英语 合计
张三      80        86          75      241
李四      78        85          78      241


declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)

drop table test

 

这段代码如何转换成狐表可执行的SQL语句?


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/3/28 8:14:00 [只看该作者]

呵呵,向SQL2011兄学习,可惜我看都看不懂,看来以后要恶补一下SQL了。

 回到顶部
帅哥哟,离线,有人找我吗?
SQL2011
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:21 积分:284 威望:0 精华:0 注册:2012/2/24 19:31:00
  发帖心情 Post By:2012/3/28 9:31:00 [只看该作者]

直接连接那个Test的表到狐表,然后使用狐表的交叉表来呈现解决比较好。

 

那时一个动态的SQL, 意味着列的数量可能是不固定的。

 

如果一定要基于这个结果在来处理数据,SQL 里面有好几种可以方法呈现。

 

但是不知道狐表连接外部数据源的时候可不可以动态增加列。

请问狐爸能否解答。

谢谢

 


 回到顶部
总数 11 1 2 下一页