【发布时间】:2020-05-13 05:02:18
【问题描述】:
您好,我下面的查询是根据我表中的@cropseasons 对多个值求和。由于我有 4 个作物季节,它似乎将值乘以 4,因为我的作物季节为 1、2、3 或 4。我想要的只是 1 个作物季节的值。有人可以帮忙吗?我在两张表中都有作物季节。
With Summary as (
Select B_NAME as Branch, LOC as Location
,SUM(payment) as Gallons
,SUM(case when printed = 1 THEN Fee ELSE NULL END) as FeeCollected
,SUM(case when printed = 0 THEN Fee ELSE NULL END) as FeeNotCollected
,SUM(case when printed = 1 THEN Payment ELSE NULL END) as GallonsIssued
,SUM(case when printed = 0 THEN Payment ELSE NULL END) as GallonsNotIssued
From SicbWeeklyDeliveriesFuelArchive F Inner Join FarmerGroups G ON G.BSI_CODE = F.BSI_CODE
Where F.CROP_SEASON = @cropseason
Group By B_NAME, LOC
)
SELECT Branch
,Location
,Gallons
,GallonsIssued
,GallonsNotIssued
,FeeCollected
,FeeNotCollected
,((GallonsIssued/Gallons) * 100) as pct_GallonsCollected
FROM Summary
Order by Location, Branch
SicbWeeklyDeliveriesFuelArchive
+-------+----------+-------------+------+----------+ ------+-------------+----------+ |身份证 | BSI_CODE | B_NAME |地点 |付款 |费用 |作物季节 |印刷 | +-------+----------+-------------+------+----------+ ------+-------------+----------+ | 18735 |第2176章圣纳西索 |捷克 | 85 | 8.5 | 4 | 0 | | 18738 |第2176章圣纳西索 |捷克 | 65 | 6.5 | 4 | 0 | | 18739 | 10494 |圣纳西索 |捷克 | 85 | 8.5 | 3 | 0 | +-------+----------+-------------+------+----------+ ------+-------------+----------+农民组
+-------+----------+--------------+--------------+ |身份证 | BSI_CODE |作物季节 |分行 | +-------+----------+--------------+--------------+ | 10473 |第2176章4 |圣纳西索 | | 11478 |第2176章3 |圣纳西索 | | 12787 | 10494 | 4 |圣罗马 | +-------+----------+--------------+--------------+【问题讨论】:
-
我们不知道你的桌子。您的查询中有两个表,但您没有限定列。你有
b_name,但它是f.b_name还是g.b_name?是f.loc或g.loc?f.printed`还是g.printed? ...您已将每周行限制为一个作物季节,但您似乎为一个这样的行获得了多个农民组。您加入 BSI 代码,这在农民组表中可能不是唯一的。因此,您会获得多个匹配项。在不了解您的桌子的情况下,我们无法提供帮助。如果农民组表也有作物季节列,那么您在ON子句中忘记了它。 -
有时它有助于在不进行聚合的情况下运行查询,即只需
select * from sicbweeklydeliveriesfuelarchive f inner join farmergroups g on g.bsi_code = f.bsi_code where f.crop_season = @cropseason order by b_name, loc即可查看您构建总和的数据集。 -
@ivias 。 . .没有人能真正回答你的问题。正如 Thorsten 指出的那样,这是不可思议的。 限定所有列引用,以便清楚它们来自哪些表。提供样本数据和所需结果,以便我们了解您要解释的内容。您还应该提供适当的数据库标签。
-
@ThorstenKettner 我已经添加了表格和示例数据。我还尝试在 FROM 语句的同一行添加 F.CROP_SEASON = cropseason,例如。来自 SicbWeeklyDeliveriesFuelArchive F Inner Join FarmerGroups G ON G.BSI_CODE = F.BSI_CODE AND F.CROP_SEASON = cropseason 但似乎仍然不起作用。