【发布时间】:2019-06-21 14:30:07
【问题描述】:
我试图在 SQL 中显示三个不同的列,它们都来自同一个数据库,但每个列都来自不同的表。一列称为名称,我也希望将输出分组,另一列是称为货币的两列之间的计算,第三列是日期。 NameId 连接 Name 和 Money Column,MoneyId 连接 Money 和 Date
我在 dbVisualizer 上创建它,这三列都是同一数据库中不同表的所有部分。如何在按名称列分组的同时显示计算出的 Money 列及其正确日期
我知道这是不正确的,但这是我目前所拥有的。我怎样才能进行货币计算,但又不必将其属性放入按函数分组的函数中才能运行。
Select A.Name,
MAX(B.BillsPaid)As Paid,
MAX(B.BillsSent) As Sent, C.DateId As Date_Id,
-- This is the money Calculation
(CAST(BillsPaid As decimal(5,0))/CAST(nullif(BillsSent, 0) As
decimal(5,0)))
* 100 as Money
From B
Inner Join A on B.NameId = A.NameId
Inner Join C on B.MoneyId = C.MoneyId
Group By A.Name, C.DateId, B.BillsPaid, B.BillsSent
我想在显示器上看到这个。我是 SQL 新手,非常感谢所有帮助,谢谢。
Name Money(%) Date
John Doe 87% June 2019
我看到了
Name Paid Sent Money Date
John Doe 2 4 50% June 2019
John Doe 1 4 25% June 2019
John Doe 3 4 75% July 2019
我希望按每个姓名、每个日期对钱进行分组,但是每个姓名每月支付/发送的金额不止一个
【问题讨论】:
-
你为什么要分组和在
B.BillsPaid和B.BillsSent上聚合? -
我需要支付账单的百分比,如果我不将它们放入组中,我会收到错误,我不想将它们分组
-
不分组会有什么错误?在
GROUP BY中放入一些东西并聚合列是完全多余的。您可以简单地删除MAX和GROUP BY并使用DISTINCT,您会在这里得到相同的结果。 -
肯定有一点样本数据来配合预期的输出会有所帮助,但如果我不得不猜测,我想你想删除
MAX(..)行,SUM()@ 里面的两个字段987654332@ 方程,并从您的分组中删除BillsPaid和BillsSent。 -
感谢您的反馈。我删除了 Max(..) 并将其替换为 SUM(..),并从组中删除了这些列,但是我仍然收到错误消息 1) [代码:8120,SQL 状态:S1000] 列 'BillsPaid' 无效在选择列表中,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。 BillsSent 出现同样的错误
标签: sql sql-server group-by nested-queries dbvisualizer