这样的统计功能如何实现??

neuer 2004-05-09 11:25:47
有3个表
表A
单位 日期 发货金额

表B
单位 日期 回收金额

表C
单位 赊销额度 赊销期限(天数)

注:赊销额度是指允许该单位的欠款金额(比如200万,50万),赊销期限是允许该单位的欠款时间(比如90天,60天)

现要求如下的统计功能,按照时间(T,包含年月日)来统计
单位-欠款-超赊销额度金额-超赊销期限金额
c1----c2-------c3-----------c4

c2=到T为止c1的总发货金额-到T为止c1的总回收金额
c3=c2-c1的赊销额度
c4=从T开始算起,c1的赊销天数之前的所有发货额-到t为止c1的总回收金额

分开来统计都容易,就是如何将这些统计数据放一起,在同一个dbgrid里面显示出来?
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
DontWorry 2004-05-09
  • 打赏
  • 举报
回复
Declare @表A Table (单位 varchar(10), 日期 datetime, 发货金额 decimal(18, 6))

INSERT INTO @表A
SELECT 'A', '2000-02-01', '200'
UNION ALL SELECT 'A', '2000-02-01', '200'
UNION ALL SELECT 'A', '2000-04-01', '200'
UNION ALL SELECT 'A', '2000-02-02', '200'
UNION ALL SELECT 'A', '2000-03-02', '200'

UNION ALL SELECT 'B', '2000-02-01', '200'
UNION ALL SELECT 'B', '2000-04-01', '2100'
UNION ALL SELECT 'B', '2000-02-04', '200'
UNION ALL SELECT 'B', '2000-03-02', '2030'

Declare @表B Table (单位 varchar(10), 日期 datetime, 回收金额 decimal(18, 6))


INSERT INTO @表B
SELECT 'A', '2000-02-01', '200'
UNION ALL SELECT 'A', '2000-02-01', '100'
UNION ALL SELECT 'A', '2000-04-01', '200'
UNION ALL SELECT 'A', '2000-02-02', 50
UNION ALL SELECT 'A', '2000-03-02', 10
UNION ALL SELECT 'B', '2000-03-02', 30

Declare @表C Table (单位 varchar(10), 赊销额度 int, 赊销期限 int)

INSERT INTO @表C
SELECT 'A', 100, 5
UNION ALL SELECT 'B', 700, 15

Declare @T Datetime

Set @T = '2000-03-01'

--- 以上是初始化數據
--- C4 (超赊销期限金额) 沒能領會意思
SELECT T_Temp.单位,
Sum(发货金额 - 回收金额 ) as 欠款,
Sum(发货金额 - 回收金额 ) - IsNull(
(SELECT 赊销额度 FROM @表C as c where c.单位 = T_temp.单位 ), 0) as 超赊销额度金额
FROM
(
SELECT a.单位, a.日期,
sum( a.发货金额) as 发货金额,
IsNull((SELECT sum( b.回收金额) as 回收金额
FROM @表b as b
WHERE a.单位 = b.单位 and a.日期 = b.日期
group by b.单位, b.日期) , 0.00) as 回收金额
FROM @表A as a
WHERE DateDiff (day , a.日期 , @T) > (SELECT 赊销期限 FROM @表C as c where c.单位 = a.单位 )
Group by a.单位, a.日期
HAVING sum( a.发货金额) - IsNull((Select sum( b.回收金额) as 回收金额 FROM @表b as b
where a.单位 = b.单位 and a.日期 = b.日期
group by b.单位, b.日期) , 0.00)
> IsNull((SELECT 赊销额度 FROM @表C as c where c.单位 = a.单位 ), 0)
) as T_Temp
Group By T_Temp.单位
zjcxc 2004-05-09
  • 打赏
  • 举报
回复
--既然你分开统计已经写出来,就这样合并

select 单位=isnull(a.单位,isnull(b.单位,c.单位))
,c1,c2,c3,c4
from(
--c1的查询语句
select ...
)a full join(
--c2的查询语句
select ...
)b on a.单位=b.单位 full join(
--c3的查询语句
select ...
)c on a.单位=c.单位 full join(
--c4的查询语句
select ...
)d on a.单位=d.单位
quansui 2004-05-09
  • 打赏
  • 举报
回复
关注+学习

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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