sql显示问题

sadikaqy 2011-01-10 02:22:01
有两个表:
select 外销发票号,核销单号,报关金额 from baoguan
select 收汇日,收汇金额,汇率,结汇 from shoukuan

外销发票号 核销单号 报关金额 收汇日 收汇金额 汇率 结汇
126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39
126HFGY10001 715890166 17228.16 2007-02-22 6323 6.8258 43159.53
126HFGY10001 715890166 17228.16 2010-04-02 4450.4 6.8121 30316.57

想得到如下显示:

外销发票号 核销单号 报关金额 收汇日 收汇金额 汇率 结汇
126HFGY10001 715890166 17228.16 2010-01-22 10879.38 6.8132 74123.39
2007-02-22 6323 6.8258 43159.53
2010-04-02 4450.4 6.8121 30316.57

...全文
164 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxiaofeiwuqiao 2011-01-11
  • 打赏
  • 举报
回复
将2表合二为一,合并后的表假如为:shoukuan

select
外销发票号=case when b.外销发票号 is null then a.外销发票号 else '' end,
核销单号=case when b.核销单号 is null then a.核销单号 else '' end,
报关金额=case when b.报关金额 is null then a.报关金额 else 0 end,
a.收汇日,a.收汇金额,a.汇率,a. 结汇

from shoukuan a left join shoukuan b on a.外销发票号=b.外销发票号
and a.核销单号=b.核销单号 and a.报关金额=b.报关金额 and a.收汇金额>b.收汇金额
group by a.外销发票号,b.外销发票号,a.核销单号,b.核销单号,a.报关金额,b.报关金额,a.收汇日,a.收汇金额,a.汇率,a. 结汇
nothingme45 2011-01-10
  • 打赏
  • 举报
回复
sf 1
weiyuguang_9 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dawugui 的回复:]
SQL code
create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
insert into baoguan values('126HFGY10001', '715890166', 17228.16)
create table shoukuan(外销发票号 varchar(20),收汇日 da……
[/Quote]
不错,应该没什么BUG.
快溜 2011-01-10
  • 打赏
  • 举报
回复
select row_number() over(partition by 收汇日 order by 外销发票号) as Row_num into #TB

update #TB set 字段=null where Row_num>1
guguda2008 2011-01-10
  • 打赏
  • 举报
回复
大乌龟的毅力绝对是神级的
dawugui 2011-01-10
  • 打赏
  • 举报
回复
create table baoguan(外销发票号 varchar(20),核销单号 varchar(20),报关金额 decimal(18,2))
insert into baoguan values('126HFGY10001', '715890166', 17228.16)
create table shoukuan(外销发票号 varchar(20),收汇日 datetime,收汇金额 decimal(18,2),汇率 decimal(18,4),结汇 decimal(18,2))
insert into shoukuan values('126HFGY10001','2010-01-22', 10879.38 ,6.8132 ,74123.39)
insert into shoukuan values('126HFGY10001','2007-02-22', 6323 ,6.8258 ,43159.53)
insert into shoukuan values('126HFGY10001','2010-04-02', 4450.4 ,6.8121 ,30316.57)
go

select case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then t.外销发票号 else '' end 外销发票号,
case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then t.核销单号 else '' end 核销单号,
case when 收汇日 = (select top 1 收汇日 from shoukuan where 外销发票号 = m.外销发票号 order by 收汇日) then cast(t.报关金额 as varchar) else '' end 报关金额,
收汇日,收汇金额,汇率,结汇
from baoguan t , shoukuan m
where t.外销发票号 = m.外销发票号
order by m.收汇日

drop table baoguan , shoukuan

/*
外销发票号 核销单号 报关金额 收汇日 收汇金额 汇率 结汇
-------------------- -------------------- ------------------------------ ------------------------------------------------------ -------------------- -------------------- --------------------
126HFGY10001 715890166 17228.16 2007-02-22 00:00:00.000 6323.00 6.8258 43159.53
2010-01-22 00:00:00.000 10879.38 6.8132 74123.39
2010-04-02 00:00:00.000 4450.40 6.8121 30316.57

(所影响的行数为 3 行)
*/
dawugui 2011-01-10
  • 打赏
  • 举报
回复
select case when 收汇日 = (select min(收汇日) from baoguan where 外销发票号 = t.外销发票号) then 外销发票号 else '' end 外销发票号,
case when 收汇日 = (select min(收汇日) from baoguan where 外销发票号 = t.外销发票号) then 核销单号 else '' end 核销单号,
case when 收汇日 = (select min(收汇日) from baoguan where 外销发票号 = t.外销发票号) then cast(报关金额 as varchar) else '' end 报关金额,
收汇日,收汇金额,汇率,结汇
from baoguan t
sadikaqy 2011-01-10
  • 打赏
  • 举报
回复
100%结贴率,高手过来瞧瞧啊……
sadikaqy 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qiudong_5210 的回复:]
在客户端,判断要显示的数据就行了,像后面的数据就不让外销发票号 核销单号显示出来就行了
[/Quote]
不是这样的,假如有三条记录,外销发票号、核销单号、报关金额只显示第一行,其余两行不显示。
qiudong_5210 2011-01-10
  • 打赏
  • 举报
回复
在客户端,判断要显示的数据就行了,像后面的数据就不让外销发票号 核销单号显示出来就行了
sadikaqy 2011-01-10
  • 打赏
  • 举报
回复
通过核销单号关联
昵称被占用了 2011-01-10
  • 打赏
  • 举报
回复
说明关联
bancxc 2011-01-10
  • 打赏
  • 举报
回复
显示问题客户端解决

34,593

社区成员

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

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