以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  求教,这样的SQL查询语句如何实现?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=17874)

--  作者:baoxyang
--  发布时间:2012/3/27 16:13:00
--  求教,这样的SQL查询语句如何实现?
表A和表B,查询表A表B列所有订单号相同的记录,表A为主表,表B为子表,其中表B中为最后一条记录(多条记录时)。请指点!
--  作者:baoxyang
--  发布时间:2012/3/27 17:26:00
--  

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

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


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

--  作者:baoxyang
--  发布时间: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语句如何实现?请指点!!先谢了!!

 


--  作者:狐狸爸爸
--  发布时间:2012/3/27 18:15:00
--  
这个我不会,你去csdn的sql server论坛问问看看,哪里高手比较多。
--  作者:SQL2011
--  发布时间: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
--  发布时间:2012/3/28 0:23:00
--  

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


--  作者:SQL2011
--  发布时间: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
--  发布时间: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语句?


--  作者:狐狸爸爸
--  发布时间:2012/3/28 8:14:00
--  
呵呵,向SQL2011兄学习,可惜我看都看不懂,看来以后要恶补一下SQL了。
--  作者:SQL2011
--  发布时间:2012/3/28 9:31:00
--  

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

 

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

 

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

 

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

请问狐爸能否解答。

谢谢