以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] SQL查询语句  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=73686)

--  作者:ncefans
--  发布时间:2015/8/24 20:18:00
--  [求助] SQL查询语句
有一个"客户订单"表,列有: 订单日期,客户编号,品名,规格,销售单价,数量,税率.

要列出客户编号为"PD001",不同品名/规格,所对应最后一次订单的销售单价,数量,税率.

SELECT DISTINCT 品名,规格 Fro m {客户订单} WHERE 客户编号=\'PD001\'
这个查询可以得到该客户编号的所有不同品名/规格的列表, 接下来, 应该怎么样把这个结果作为条件,得到下一步的结果呢?  谢谢!

--  作者:大红袍
--  发布时间:2015/8/24 20:28:00
--  

方法一:

 

Select 品名,规格, (select top 1 销售单价 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc), (select top 1 销售单价 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc) Fr om {客户订单} as a group by 品名,规格

 

方法二

 

select * fr om {客户订单} as a inner join (select 品名,规格, max(订单日期) as 订单日期 fr om {客户订单} group by 品名,规格) as b on  a.品名 = b.品名 and a.规格 = b.规格 and a.订单日期 = b.订单日期


--  作者:ncefans
--  发布时间:2015/8/24 20:32:00
--  
谢谢版主如此快的回复,我两种都测试一下.......SQL要加强学习中了.
--  作者:ncefans
--  发布时间:2015/8/24 20:49:00
--  
利用第一种方法,
Select 品名,规格, (select top 1 销售单价 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc), (select top 1 数量 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc), (select top 1 税率 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc) Fr om {客户订单} as a group by 品名,规格

得到了正确的结果. 生成五列:  品名,规格,column1,column2,column3..
如何指定后三列的列名....正在百度中.....

--  作者:ncefans
--  发布时间:2015/8/24 20:56:00
--  
方法一的完整语句是:

Select 品名,规格, (select top 1 销售单价 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc) 销售单价, (select top 1 数量 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc) 数量, (select top 1 税率 fr om {客户订单} b where a.品名 = b.品名 and a.规格 = b.规格 order by 订单日期 desc) 税率 Fr om {客户订单} as a group by 品名,规格

再次感谢!