sql - 用分区联合 ALL
问题描述
我有两个单独的查询,我想将它们合并为一个。他们自己工作正常,我尝试使用联合,但我似乎无法正确使用。基本上,一个查询是在某个日期获得余额,另一个是计算一系列日期的活动。我希望结果显示在彼此相邻的列中。
尝试编写没有分区的查询并作为一个简单的分组依据。使用联合,但我无法让第二个查询的列出现在主选择语句中。
Declare @Date datetime = '04/01/2019'
期初余额代码:
Select Left(Account,4)Entity, right(Account,9)Account, sum(debit+credit)BBal
From GLT_CURRENT__TRANSACTION
Where Left(Account,4) = '9452' and
Right(Account,9) IN ('1110.0130','1110.0131','2110.0061','2110.0062')
and Accounting_Date <= EOMONTH('04-01-2019',-1)
Group By Left(Account,4), right(Account,9)
活动总和代码
Select Left(Account,4)Entity,Right(Account,9),Sum(debit+credit)Activity
From GLT_CURRENT__TRANSACTION AS A Where
Left(Account,4) = '9452' and Accounting_Date >= '04-01-2019' and Accounting_Date <= Eomonth('04-01-2019')
AND Right(Account,9) IN ('1110.0130','1110.0131','2110.0061','2110.0062')
Group By Left(Account,4), Right(Account,9)
如何将两者结合在 1 行?尝试联合但在第二个查询中不起作用。
Entity Account BBalance Activity
9452 1110.0130 50.00 2,500
解决方案
我认为你把事情复杂化了
SELECT
LEFT(Account,4) as Entity,
RIGHT(Account,9) as Account,
SUM(CASE WHEN accounting_date <= EOMONTH(@date, -1) THEN debit+credit END) as BBal,
SUM(CASE WHEN accounting_date > EOMONTH(@date, -1) THEN debit+credit END) as Activity
FROM
GLT_CURRENT__TRANSACTION
WHERE
Left(Account,4) = '9452' and
Right(Account,9) IN ('1110.0130','1110.0131','2110.0061','2110.0062') and
Accounting_Date <= EOMONTH(@Date)
GROUP BY
Left(Account,4),
right(Account,9)
此查询在给定 @date(如 14-Mar-2018)时,会选择 2018 年 3 月 31 日之前的所有交易。对于每一行,SUM 中的 CASE WHEN 测试会计日期是过去(对于 bbal)还是当前月份(对于活动)。如果特定交易的会计日期不符合规则 CASE WHEN 测试返回 false),则 CASE WHEN 的返回值为空,因此不求和
要了解有关此查询如何工作的更多信息,请在没有分组/求和的情况下运行它:
SELECT
LEFT(Account,4) as Entity,
RIGHT(Account,9) as Account,
Accounting_date,
(CASE WHEN accounting_date <= EOMONTH(@date, -1) THEN debit+credit END) as BBal,
(CASE WHEN accounting_date > EOMONTH(@date, -1) THEN debit+credit END) as Activity
FROM
GLT_CURRENT__TRANSACTION
WHERE
Left(Account,4) = '9452' and
Right(Account,9) IN ('1110.0130','1110.0131','2110.0061','2110.0062') and
Accounting_Date <= EOMONTH(@Date)
3 月 @date 的交易将是这样的:
1, 1, 02-Feb-18, $100, null --previous month
1, 1, 28-Feb-18, $300, null --previous month
1, 1, 02-Mar-18, null, $400 --current month
1, 1, 28-Mar-18, null, $500 --current month
查看根据会计日期将交易金额拆分为 bbal 列或活动列的情况?现在,当我们对它们求和并将它们分组时(从查询结果中删除日期列):
1, 1, $400, $900 --the $400 is £100+$300, the $900 is $400+$500
推荐阅读
- sql-server - SQL 维护计划 - 确定步骤的持续时间
- recaptcha - 我可以在隐藏徽章时翻译使用条款 recaptcha 吗?
- python - __str__ 返回非字符串(产品类型)
- java - 从 Java 方法获取 Scala 注释
- python-3.x - 有没有更好的方法将数据行添加到 python 中的主列表?
- html - 将 CSS 应用到一个表单
- html - Div 类变得更大
- excel - 根据列表创建不同的组合 - 无重复
- javascript - 根据其他Select字段选择ant设计更新Select Option列表
- flutter - 颤动水平文本页面视图?