如何写这个特殊的主细表sql?(100分)

  • 主题发起人 主题发起人 fangheling
  • 开始时间 开始时间
F

fangheling

Unregistered / Unconfirmed
GUEST, unregistred user!
要求结果集如下:
单据号 | 客户名称 | 日期 | 型号 | 规格 | 数量 | 单价...
0001 长城集团 2002-10-21 PP PP01 10000 0.5
AA AA01 10000 0.6
CC CC01 30000 0.3
0002 华康集团 2002-10-22 BB BB01 40000 0.8
AA AA01 10000 0.6
CC CC01 30000 0.3
也就是说普通的主细表关联下只出现一条主表记录,并出现在细表明细的第一条上,
如果按下列sql则变为如下结果集
select m.*,d.* from m inner join d on m.mkey=d.fkey order by m.xdate desc
单据号 | 客户名称 | 日期 | 型号 | 规格 | 数量 | 单价...
0001 长城集团 2002-10-21 PP PP01 10000 0.5
0001 长城集团 2002-10-21 AA AA01 10000 0.6
0001 长城集团 2002-10-21 CC CC01 30000 0.3
0002 华康集团 2002-10-22 BB BB01 40000 0.8
0002 华康集团 2002-10-22 AA AA01 10000 0.6
0002 华康集团 2002-10-22 CC CC01 30000 0.3
这样的结果集不利于查看?
我该怎么办?
另是否有这样的控件?
谢谢.
 
sql好像有点困难
可以用程序屏蔽
 
sql也可以做到,你可以做一个存储过程先选择数据集送至(临时)表中,
再利用curso逐条控制!
 
在客户端用程序再处理那个DATASET
 
用sql的代价高了些
 
单据号 客户名称 日期 型号 规格 数量 单价
0001 长城集团 2002-10-21 PP PP01 10000 0.5
0001 长城集团 2002-10-21 AA AA01 10000 0.6
0001 长城集团 2002-10-21 CC CC01 30000 0.3
0002 华康集团 2002-10-22 BB BB01 40000 0.8
0002 华康集团 2002-10-22 AA AA01 10000 0.6
0002 华康集团 2002-10-22 CC CC01 30000 0.3

Select identity(int,1,1) as tmp,*
Into #temp
From .....
得到

tmp 单据号 客户名称 日期 型号 规格 数量 单价
1 0001 长城集团 2002-10-21 PP PP01 10000 0.5
2 0001 长城集团 2002-10-21 AA AA01 10000 0.6
3 0001 长城集团 2002-10-21 CC CC01 30000 0.3
4 0002 华康集团 2002-10-22 BB BB01 40000 0.8
5 0002 华康集团 2002-10-22 AA AA01 10000 0.6
6 0002 华康集团 2002-10-22 CC CC01 30000 0.3

Select (case when exists(Select * from #temp where tmp<AA.tmp and
单据号=AA.单据号 and 客户名称=AA.客户名称 and 日期=AA.日期)
then '' else 单据号 end) as 单据号,
(case when exists(Select * from #temp where tmp<AA.tmp and
单据号=AA.单据号 and 客户名称=AA.客户名称 and 日期=AA.日期)
then '' else 客户名称 end) as 客户名称,
(case when exists(Select * from #temp where tmp<AA.tmp and
单据号=AA.单据号 and 客户名称=AA.客户名称 and 日期=AA.日期)
then '' else Convert(varchar(10),日期,20) end) as 日期,
型号,
规格,
数量,
单价
From #temp AA
得到

单据号 客户名称 日期 型号 规格 数量 单价
0001 长城集团 2002-10-21 PP PP01 10000 0.5
AA AA01 10000 0.6
CC CC01 30000 0.3
0002 华康集团 2002-10-22 BB BB01 40000 0.8
AA AA01 10000 0.6
CC CC01 30000 0.3
 
select m.*,d.* from m left outer join d on m.mkey=d.fkey order by m.xdate desc
 
接受答案了.
 
后退
顶部