刚才提了一个问题50分,很多人给我回答.我已经结贴,在此表示感谢.
现在我遇到的问题在原来的基础上又增加了一些难度,希望大家给予帮助.表1 cangku
id 产品名称 表2 xiaoshou
id 产品id 数量 单价 总额 销售日期现在我要通过联合查询实现以下功能产品名称 销售数量 销售总额 该产品最后一次销售日期
要求按照 销售总额进行排序,或者按照最后一次销售日期进行排序,不管有没有销售记录,都要列出所有产品的名称.请问这样的功能sql 的联合查询语句该怎么写?
现在我遇到的问题在原来的基础上又增加了一些难度,希望大家给予帮助.表1 cangku
id 产品名称 表2 xiaoshou
id 产品id 数量 单价 总额 销售日期现在我要通过联合查询实现以下功能产品名称 销售数量 销售总额 该产品最后一次销售日期
要求按照 销售总额进行排序,或者按照最后一次销售日期进行排序,不管有没有销售记录,都要列出所有产品的名称.请问这样的功能sql 的联合查询语句该怎么写?
select
A.产品名称,
sum(a.数量) as 销售数量,
sum(A.总额) as 销售总额,
max(销售日期) as 该产品最后一次销售日期
from cangku as A
left join xiaoshou as B on A.id=B.产品id
group by A.产品名称
order by sum(A.总额) desc
from cangku a
left join
( select *
from xiaoshou c
where not exists(select 1
from xiaoshou
where 产品id = c.产品id and 销售日期 < c.销售日期)
) b
on a.id = b.产品id
id 产品名称 表2 xiaoshou
insert @cangku select 1,'test'insert @xiaoshou select 1,1,1,10,10,'2001-01-01' union allselect 1,1,1,15,15,'2001-01-02'select a.产品名称 ,b.数量 ,b.总额 as 销售总额,b.销售日期 as 该产品最后一次销售日期
from @cangku a
left join
( select *
from @xiaoshou c
where not exists(select 1
from @xiaoshou
where 产品id = c.产品id and 销售日期 > c.销售日期)
) b
on a.id = b.产品id
/*
产品名称 数量 销售总额 该产品最后一次销售日期
---------- ----------- ----------- ------------------------------------------------------
test 1 15 2001-01-02 00:00:00.000*/
declare @cangku table(id int, 产品名称 varchar(10) )declare @xiaoshou table(id int,产品id int, 数量 int,单价 int,总额 int,销售日期 datetime)
insert @cangku select 1,'test' union select 2,'test2'insert @xiaoshou select 1,1,1,10,10,'2001-01-04' union allselect 1,1,1,15,15,'2001-01-02' union allselect 1,1,1,22,22,'2001-01-01'select a.产品名称 ,b.数量 ,b.总额 as 销售总额,b.销售日期 as 该产品最后一次销售日期
from @cangku a
left join
( select *
from @xiaoshou c
where not exists(select 1
from @xiaoshou
where 产品id = c.产品id and 总额 > c.总额)
) b
on a.id = b.产品id
/*
产品名称 数量 销售总额 该产品最后一次销售日期
---------- ----------- ----------- ------------------------------------------------------
test 1 22 2001-01-01 00:00:00.000
test2 NULL NULL NULL*/
sum(b.数量*b.单价)as [销售总额],
[该产品最后一次销售日期]=(select max(销售日期) from xiaoshou where 产品id =b.产品id )
from
cangku a
join
xiaoshou b
on a.id=b.产品id
select
A.产品名称,
sum(B.数量) as 销售数量,
sum(B.总额) as 销售总额,
max(B.销售日期) as 该产品最后一次销售日期
from cangku as A
left join xiaoshou as B on A.id=B.产品id
group by A.产品名称
order by sum(B.总额) desc