说我有MoneyIN和MoneyOUT专栏。我希望将这些整列完成,以便我得到每个列的总和,然后我希望从MoneyIN列的总和中减去MoneyOUT列的总和。我还想显示一个DateOF列和可能的描述(我想我可以自己做)。
这将是我从以下网站获取信息的原始数据库:
+-------------+------------------+---------+----------+-----------+
| Location ID | Location Address | Date Of | Money In | Money Out |
+-------------+------------------+---------+----------+-----------+
| 1 | blah | date | 10.00 | 0.00 |
| 2 | blah | date | 2,027.10 | 27.10 |
| 2 | blah | date | 0.00 | 2000.00 |
| 1 | blah | date | 0.00 | 10.00 |
| 3 | blah | date | 5000.00 | 0.00 |
+-------------+------------------+---------+----------+-----------+
我希望能够输入位置ID,然后显示结果(在此示例中,我为该位置键入2)
+---------+----------+-----------+------+
| Date Of | Money In | Money Out | |
+---------+----------+-----------+------+
| date | 2027.10 | 27.10 | |
| date | 0 | 2000 | |
| Total: | 2027.10 | 2027.10 | 0 |
+---------+----------+-----------+------+
我尝试了其他解决方案(其中一个在下面指出),但是,它们没有显示每个整列的总和,它们只是从每一行的MoneyIN中减去MoneyOUT。截至目前,我正在尝试在查询中执行此操作,但如果有更好的方法,请详细说明。 我对SQL和Access非常陌生,所以请为像我这样的初学者解释这个问题。非常感谢!
这是下面提到的表格。
+-------------+-------+----------+-----------+-----------+
| Location ID | Date | Money IN | Money Out | Total Sum |
+-------------+-------+----------+-----------+-----------+
| 1 | date | 300 | 200 | |
| 1 | date | 300 | 200 | |
| 1 | date | 300 | 200 | |
| 1 | total | 900 | 600 | 300 |
+-------------+-------+----------+-----------+-----------+
答案 0 :(得分:0)
如果没有样本数据,有点不清楚您的期望,但我认为这就是您想要的:
SELECT DateOf, SUM(MoneyIN) - SUM(MoneyOut)
FROM YourTable
GROUP BY DateOf
这将从每个不同的MoneyOut
MoneyIn
的{{1}}的总和
更新了答案
DateOf
可以让您追加“总计”'记录到结果集的底部:
UNION
一些注意事项..我使用派生表来确保总计'记录是最后的。还将SELECT *
FROM (
SELECT CAST(DateOf as varchar(20)) as DateOf, MoneyIn, MoneyOut, '' as NetMoneyIn
FROM YourTable
UNION
SELECT 'Total:', SUM(MoneyIn), SUM(MoneyOut), SUM(MoneyIN) - SUM(MoneyOut)
FROM YourTable
) A
ORDER BY CASE WHEN DateOf <> 'Total:' THEN 0 ELSE 1 END, DateOf
转换为字符串(假设它是DateOf
),否则您将遇到写字符串的问题&#39; Total:&#39;到那一栏。
答案 1 :(得分:0)
以下内容可为您提供所需内容:
SELECT DateOf, MoneyIn, MoneyOut, '' AS TotalSum FROM YourTable
UNION
SELECT 'Total', SUM(MoneyIn) AS SumIn, SUM(MoneyOut) AS SumOut,
SUM(MoneyIn - MoneyOut) AS TotalSum FROM YourTable
编辑:
你不需要做太多改变就可以达到你想要的效果。为了在运行查询时获取Access以提示参数,请在方括号中为参数指定名称;然后,Access将弹出一个窗口,提示用户输入该值。此参数也可以在查询中多次使用,而Access不会多次提示。所以以下内容适合您:
SELECT DateOf, MoneyIn, MoneyOut, '' AS TotalSum
FROM YourTable
WHERE LocationID=[Location ID]
UNION
SELECT 'Total', SUM(MoneyIn) AS SumIn, SUM(MoneyOut) AS SumOut,
SUM(MoneyIn - MoneyOut) AS TotalSum FROM YourTable
WHERE LocationID=[Location ID];
但是,看看你的桌面设计,我强烈建议你改变它。您在每条记录中都包含该地址。如果您有三个位置,但有100个记录,那么平均而言,您不必要地重复每个地址超过30次。 &#34;正常&#34;避免这种情况的方法是有一个第二个表,Locations,它有一个ID和一个Address字段。然后从YourTable中删除地址,并在其位置创建位置中的ID与YourTable中的LocationID之间的一对多关系。