sql - SQL 新手 - 如何比较两组连接表中的数据
问题描述
我正在尝试将一组多个表与 SQL 数据库中的另一组多个表进行比较。诚然,我对 SQL 非常陌生,所以如果我的术语不正确,请原谅我。
我的数据库中有 6 个单独的表。其中3个是当月的数据,另外三个是上个月的数据。我需要生成一份显示当前月份数据的报告,还要将账户余额与上个月进行比较——我需要创建一个列,根据账户余额是否匹配列出“真”或“假”。
我已将三个当月的数据表连接在一起,并将前三个月的数据表连接在一起。
两组表是相同的。下面是对表格的描述 - 一组前缀为“CURRENT”,一组前缀为“PRIOR”:
BALANCE:
EntityID
AccountID
AccountBalance
ENTITY:
ID
Label
Description
ACCOUNT:
ID
AccountNumber
Description
我需要提供的报告应该从当月的数据中列出以下内容:
Label
Description
AccountNumber
AccountDescription
AccountBalance
我需要在报告末尾添加一个名为“已更改”的列。此列应具有“真”或“假”值,具体取决于当前和以前的帐户余额是否匹配。
到目前为止,我只能加入表格。我不确定如何编辑此查询以将当前月份的 dbo.CURRENT_BALANCE.AccountBalance 与上个月的 dbo.PRIOR_BALANCE.AccountBalance 进行比较
SELECT DISTINCT
dbo.CURRENT_ENTITY.Label,
dbo.CURRENT_ENTITY.Description AS Entity,
dbo.CURRENT_ACCOUNT.AccountNumber,
dbo.CURRENT_ACCOUNT.Description AS AccountDescription,
dbo.CURRENT_BALANCE.GLAccountBalance
FROM
dbo.CURRENT_BALANCE
INNER JOIN dbo.CURRENT_ENTITY ON dbo.CURRENT_BALANCE.EntityID = dbo.CURRENT_ENTITY.ID
INNER JOIN dbo.CURRENT_ACCOUNT ON dbo.CURRENT_BALANCE.AccountID = dbo.CURRENT_ACCOUNT.ID
CROSS JOIN dbo.PRIOR_BALANCE
INNER JOIN dbo.PRIOR_ENTITY ON dbo.PRIOR_BALANCE.EntityID = dbo.PRIOR_ENTITY.ID
INNER JOIN dbo.PRIOR_ACCOUNT ON dbo.PRIOR_BALANCE.AccountID = dbo.PRIOR_ACCOUNT.ID
上面的查询返回我的预期结果:
Label Entity AccountNumber AccountDescription AccountBalance
21 Company ABC 1 Customer Sales 25
21 Company ABC 2 Customer Sales 568
22 XYZ Solutions 3 Vendor Sales 344
23 Number 1 Products 4 Vendor Sales 565
24 Enterprise Inc 5 Wholesale 334
24 Enterprise Inc 6 Wholesale 5452
24 Enterprise Inc 7 Wholesale 5877
26 QWERTY Solutions 8 Customer Sales 456
27 Acme 9 Customer Sales 752
28 United Product Solutions 10 Vendor Sales 87
我想做的是得到类似于以下的结果:
Label Entity AccountNumber AccountDescription AccountBalance Changed
21 Company ABC 1 Customer Sales 25 FALSE
21 Company ABC 2 Customer Sales 568 FALSE
22 XYZ Solutions 3 Vendor Sales 344 FALSE
23 Number 1 Products 4 Vendor Sales 565 FALSE
24 Enterprise Inc 5 Wholesale 334 TRUE
24 Enterprise Inc 6 Wholesale 5452 FALSE
24 Enterprise Inc 7 Wholesale 5877 TRUE
26 QWERTY Solutions 8 Customer Sales 456 FALSE
27 Acme 9 Customer Sales 752 FALSE
28 United Product Solutions 10 Vendor Sales 87 FALSE
我不知道从这里去哪里。非常感谢这个小组的任何建议!
解决方案
下面应该作为比较这两个值的一种方式。我为表名添加了别名以帮助阅读;
SELECT DISTINCT
ce.Label
,ce.Description AS Entity
,ca.AccountNumber
,ca.Description AS AccountDescription
,cb.GLAccountBalance
,CASE
WHEN cb.GLAccountBalance = p.PriorBalance THEN 'False'
WHEN cb.GLAccountBalance <> p.PriorBalance THEN 'True'
END AS [Changed]
FROM dbo.CURRENT_BALANCE cb
INNER JOIN dbo.CURRENT_ENTITY ce ON cb.EntityID = ce.ID
INNER JOIN dbo.CURRENT_ACCOUNT ca ON cb.AccountID = ca.ID
LEFT JOIN ( SELECT DISTINCT
pe.ID AS PE_ID
,pa.ID AS PA_ID
,pb.GLAccountBalance AS PriorBalance
FROM dbo.PRIOR_BALANCE pb
INNER JOIN dbo.PRIOR_ENTITY pe ON pb.EntityID = pe.ID
INNER JOIN dbo.PRIOR_ACCOUNT pa ON pb.AccountID = pa.ID
) p ON p.PE_ID = ce.ID AND p.PA_ID = ca.ID
推荐阅读
- javascript - 如何在javascript中使用包含“and”的条件制作if语句
- javascript - 仅在解析异步函数后,如何使嵌套循环继续,或者如何将“.then”扩展到范围之外
- mysql - 在 Laravel 中获得最高分
- android - 后台服务的 ANR
- r - 用 ID 重塑 3 列数据
- angular - 从一个组件中的服务访问变量到Angular 7中的另一个组件
- css-transitions - 如何平滑 3D 变换旋转?
- python - 将 SQL 查询的结果与执行日期一起存储在单独的 pandas 数据框中
- javascript - 突变何时会成为副作用?
- jquery - jQuery 启用必需的验证