找回密码
 立即注册

QQ登录

只需一步,快速开始

shnb

中级会员

13

主题

82

帖子

659

积分

中级会员

积分
659

[已处理] 9.0.103

shnb
中级会员   /  发表于:2024-10-21 10:01  /   查看:387  /  回复:12
20金币
情况是这样的:我现在有三个表,一个表A是单位表,字段是单位编号,单位名称,单位余额,一个表B是单位销售表(每天的销售明细),字段是单位编号,销售日期,销售数量,销售金额,一个表C是单位收款表(每天的收款明细),字段是单位编号,收款日期,收款金额,现在我想建立一个视图,字段是单位编号,单位余额,单位总销售数量,单位总回款金额。我主要是纠结在这里:单位余额固然是不会变的,但是我想通过不同的日期段的选择,把该单位该时间的销售总数量和总回款金额体现出来,

12 个回复

正序浏览
Levi.Zhang
超级版主   /  发表于:2024-10-22 10:22:52
13#
大佬可以下载新版本尝试一下楼上的方法哈

看完必恍然大悟的活字格内幕:四十、如何让多个版本的设计器共存
https://gcdn.grapecity.com.cn/showtopic-68945-1-1.html
(出处: 葡萄城开发者社区)
回复 使用道具 举报
shnb
中级会员   /  发表于:2024-10-21 16:34:08
12#
版本高,我还是9的,你先看看我的语句有啥漏没?反正我还在测试阶段
回复 使用道具 举报
二麻子
初级会员   /  发表于:2024-10-21 16:04:09
11#
shnb 发表于 2024-10-21 10:42
这个日期有二个日期,一个是销售日期,一个是收款日期,咋整?可否设置日期变量,然后通过变量分别查询销售 ...

我仔细想了下,直接在视图里加日期行不通。最后实现的效果也没用到视图,直接用SQL将符合条件的数据筛选出来运算,再返回给前端导入到表格当中。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:2024-10-21 15:29:07
10#
回复 使用道具 举报
shnb
中级会员   /  发表于:2024-10-21 15:19:17
9#
我已经初步解决了这个问题,现在把这段SQL上传上来,给大家参考一下。

SELECT 片属编号,单位编号,单位余额,销售.销售日期,收款.收款日期,sum(收款.收款金额) AS "收款金额",sum(销售.销售金额) AS 销售金额,sum(销售.销售折吨) AS 销售数量 FROM 销售单位表
left JOIN  销售 ON 销售单位表.单位编号=销售.销售单位编号
left JOIN  收款 ON 销售单位表.单位编号=收款.收款单位
group by 销售单位表.单位编号
回复 使用道具 举报
Levi.Zhang
超级版主   /  发表于:2024-10-21 14:04:29
8#
感谢大佬们对活字格的支持
如果您的问题已解决,请及时更新帖子的状态为“已处理”,并设置最佳答案给有帮助到你的回复;
如果您的问题还未解决,欢迎跟帖补充;
如果您有新的问题,也欢迎创建新的求助帖呦。
回复 使用道具 举报
shnb
中级会员   /  发表于:2024-10-21 11:46:31
7#
余额我是通过入帐时就计算出来的,选择不同的日期只能计算出期间内的所有销售和回款,但是余额不会变。我就是要这样的效果。这样就可以把当时的最新余额和某个时间段内的销售和回款的统计数总结到一张表格中,这样方便有时想看余额和销售和回款情况要分别到二个地方去查询了,你的方法我试试,谢谢
回复 使用道具 举报
Y_D
初级会员   /  发表于:2024-10-21 11:35:52
6#
Syl 发表于 2024-10-21 11:33
单位余额怎么来的?不就是销售减去回款得出来的,
选择不同的日期只能计算出期间内的所有销售和回款,但 ...

CREATE VIEW UnitSalesView AS
(
    SELECT
        A.UnitID,
        A.Balance + COALESCE(SUM(B.SalesQuantity), 0) - COALESCE(SUM(C.ReceiptAmount), 0) AS CurrentBalance
    FROM
        Units A
    LEFT JOIN
        Sales B ON A.UnitID = B.UnitID AND B.SalesDate < @recentDate
    LEFT JOIN
        Receipts C ON A.UnitID = C.UnitID AND C.ReceiptDate < @recentDate
    GROUP BY
        A.UnitID, A.Balance
)
UNION ALL
(
    SELECT
        A.UnitID,
        NULL AS Balance,
        COALESCE(SUM(B.SalesQuantity), 0) AS TotalSalesQuantity,
        COALESCE(SUM(C.ReceiptAmount), 0) AS TotalReceiptAmount
    FROM
        Units A
    LEFT JOIN
        Sales B ON A.UnitID = B.UnitID AND B.SalesDate BETWEEN @startSalesDate AND @endSalesDate
    LEFT JOIN
        Receipts C ON A.UnitID = C.UnitID AND C.ReceiptDate BETWEEN @startReceiptDate AND @endReceiptDate
    GROUP BY
        A.UnitID
);
回复 使用道具 举报
Syl悬赏达人认证
银牌会员   /  发表于:2024-10-21 11:33:30
5#

单位余额怎么来的?不就是销售减去回款得出来的,
选择不同的日期只能计算出期间内的所有销售和回款,但是余额不会变。

可以按这个思路写视图:

视图取两个查询union,第一个计算余额(按最早日期和选择的最近日期计算余额),第二个计算期间内的销售和回款。
这样选择不同的期间余额和发生都有了


回复 使用道具 举报
shnb
中级会员   /  发表于:2024-10-21 10:42:18
3#
本帖最后由 shnb 于 2024-10-21 10:44 编辑

这个日期有二个日期,一个是销售日期,一个是收款日期,咋整?可否设置日期变量,然后通过变量分别查询销售日期和收款日期的数量
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部