SQL按物料名称并列显示问题

sevensevery 2011-09-22 07:35:34

--加入采购销售数据
Insert into #T1(FDate, FName, FInQty)
Select '2011-08-01', '豆粕', 80
Insert into #T1(FDate, FName, FInQty)
Select '2011-08-15', '豆粕', 100
Insert into #T1(FDate, FName, FInQty)
Select '2011-08-02', '玉米', 500

Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-02', '豆粕', 40
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-10', '玉米', 10
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-10', '玉米', 15
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-12', '玉米', 25


--Select * from #T1
--Select * from #T2


要求两张表关联后生成如下信息

品种 日期 进货 | 日期 销货
豆粕 08-01 80 | 08-02 40
豆粕 08-15 100 | 空 0
玉米 08--2 50 | 08-10 10
玉米 空 0 | 08-10 15
玉米 空 0 | 08-12 25
......

实际上就是两张表, 按物料, 并列显示;全存在, 左右关联问题

望指教!!
...全文
37 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sevensevery 2011-09-22
  • 打赏
  • 举报
回复

Select FDate
,Case when FID = 1 then FQty End as FInQty
,Case when FID = 21 then FQty End as FOutQty

from
(
Select 1 as FID, FDate, FName, FInQty as FQty from #T1
Union All
Select 21 as FID, FDate, FName, FSaleQty as FQty from #T2
) t
Order by t.FName, t.FDate





-晴天 2011-09-22
  • 打赏
  • 举报
回复
create table #T1(FDate datetime, FName nvarchar(10), FInQty int)
Insert into #T1(FDate, FName, FInQty)
Select '2011-08-01', '豆粕', 80
Insert into #T1(FDate, FName, FInQty)
Select '2011-08-15', '豆粕', 100
Insert into #T1(FDate, FName, FInQty)
Select '2011-08-02', '玉米', 500
create table #T2(FDate datetime, FName nvarchar(10), FSaleQty int)
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-02', '豆粕', 40
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-10', '玉米', 10
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-10', '玉米', 15
Insert into #T2(FDate, FName, FSaleQty)
Select '2011-08-12', '玉米', 25
go
select a.fname,b.fdate,b.finqty,c.fdate,c.FSaleQty
from(
select distinct fname,rn from(
select row_number()over(partition by fname order by fdate)rn,fname from #T1
union
select row_number()over(partition by fname order by fdate)rn,fname from #T2
)t)a
left join (select row_number()over(partition by fname order by fdate)rn,* from #T1) b on a.FName =b.FName and b.rn=a.rn
left join (select row_number()over(partition by fname order by fdate)rn,* from #T2) c on a.FName =c.FName and c.rn=a.rn
order by fname
/*
fname fdate finqty fdate FSaleQty
---------- ----------------------- ----------- ----------------------- -----------
豆粕 2011-08-01 00:00:00.000 80 2011-08-02 00:00:00.000 40
豆粕 2011-08-15 00:00:00.000 100 NULL NULL
玉米 2011-08-02 00:00:00.000 500 2011-08-10 00:00:00.000 10
玉米 NULL NULL 2011-08-10 00:00:00.000 15
玉米 NULL NULL 2011-08-12 00:00:00.000 25

(5 行受影响)

*/
go
drop table #t1,#t2


34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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