Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么我的减法结果不正确?_Sql Server_Tsql_Ssms_Azure Sql Database - Fatal编程技术网

Sql server 为什么我的减法结果不正确?

Sql server 为什么我的减法结果不正确?,sql-server,tsql,ssms,azure-sql-database,Sql Server,Tsql,Ssms,Azure Sql Database,大家好。我正在尝试使用上面的查询获取更新的总数。我的问题是,这些总数远远超过了它应该是什么。我不确定我做错了什么。我们使用的是Azure SQL数据库,我使用的是RazorSQL和SSMS 2012以相同的结果运行此查询。感谢您的帮助。请随时要求澄清。复制问题的简单解决方案: select sum(l.coins) - sum(t.coins) as total from luxx_getaway_2016_coins l join thrive_rewards_redeemed t on l.

大家好。我正在尝试使用上面的查询获取更新的总数。我的问题是,这些总数远远超过了它应该是什么。我不确定我做错了什么。我们使用的是Azure SQL数据库,我使用的是RazorSQL和SSMS 2012以相同的结果运行此查询。感谢您的帮助。请随时要求澄清。

复制问题的简单解决方案:

select sum(l.coins) - sum(t.coins) as total
from luxx_getaway_2016_coins l
join thrive_rewards_redeemed t
on l.consid = t.guideid
where l.consid = 24969 and t.harvestyear = 1516
对于更一般的情况:

Select
    (select sum(l.coins)
    from luxx_getaway_2016_coins l
    where l.consid = 24969)

-
    (select sum(t.coins)
    from thrive_rewards_redeemed t
    where t.guideid = 24969 
        and t.harvestyear = 1516)

如果只选择行而不选择总和,将返回什么?e、 g.
select*from luxx\u getaway\u 2016\u coins l join thrive\u rewards\u在l.consid=t.guideid上兑换的t,其中l.consid=24969和t.harvestyear=1516
在各自的表中是唯一的?如果没有,则在加入时将得到重复项。@APH两个表中所有字段的列表。我现在明白为什么我会得到我得到的总数了。对于一个表中的每个行项目,将为要联接的表创建一个重复的行项目。因此,如果一个表中有10行,另一个表中有一行,那么行数最少的表需要产生与另一个表相同的行数。@rdbradshaw我现在意识到了这一点。感谢您指出这一点。@rdbradshaw在sql server中,在这种情况下,这是不可能的吗?这对该查询有效。非常感谢。我的下一步是找出如何应用这一原则,并对所有consid's的硬币进行查看。@acecabana-我对答案进行了编辑,以展示一种处理一般情况的方法。我现在不在我的主计算机上,所以还没有测试它。有什么方法可以应用完全联接,而不让它为不匹配的行显示空值?我想对两个表中存在的ID进行减法运算,但保留表a中的所有记录以及减法运算中更新的总数;如果将
内部联接
更改为
外部联接
,则查询的工作原理应该大致相同。只需根据需要添加一些
ISNULL
s即可。
; With A as (select consid, sum(l.coins) as TotA
    from luxx_getaway_2016_coins l
    group by consid)
, B as (select guideid, sum(t.coins) as TotB
    from thrive_rewards_redeemed t
    where t.harvestyear = 1516
    group by guideID)

Select a.consid, TotA - TotB as Total 
from A
inner join B
on a.Consid = b.GuideID