【问题标题】:How to sum an amount by clusters and look up additional value如何按集群汇总金额并查找附加值
【发布时间】:2019-01-10 15:49:12
【问题描述】:

我目前正在学习SQL,遇到如下问题,应该很容易解决,但还是没有成功: 我有两个表:事务和站点。在 Transactions 表中是我的所有订单条目,在 Sites 表中是有关我的生产站点的信息。我现在想汇总站点聚集的所有销售额,然后显示一个表格,您可以在其中看到不同站点、每个站点的销售额和站点的地址。由于某种原因,最后一步不起作用。它只在地址列中显示“空”值。当我选择完全外连接时,它会显示地址,但不是在相应的行中,而是在之后的行中,然后其他两列被标记为 Null。 有什么想法吗?

 SELECT Transactions.Site, SUM(Transactions.Sales) AS [Sales_per_Site], 
 Sites.Adress
 From Transactions
 LEFT JOIN Sites ON Transactions.Site=Sites.Site
 Group by Transactions.Site, Sites.Adress
 ORDER BY Transactions.Site DESC

 Site   Sales     Adress
 5      16042772    NULL
 4      13163942    NULL
 3      14476761    NULL
 2      15912831    NULL
 1      13735548    NULL

【问题讨论】:

  • 编辑问题添加一些示例数据和所需的结果会有所帮助。
  • 您确定 Sites.Adress 不为空吗?
  • 它也可以是你离开时的加入。您确定两个表中的站点相同吗?
  • 嗨!是的,地址栏中每五个站点就有一个值。期望的结果是实际的地址而不是“NULL”
  • 是的,都是一样的,从 1 到 5 的站点在事务表和站点表中,都在站点列中

标签: sql sql-server join group-by left-join


【解决方案1】:

当我选择完全外部连接时,它会显示地址但不显示 相应的行,但在后面的行中,其他两个 然后将列标记为 Null。

这几乎可以肯定意味着您的两个表在您要加入的列上彼此不相关:Transactions.Site=Sites.Site

如果您确实在两个表中都看到了站点 1-5,那么列中可能存在空白或其他内容,导致两侧实际上不相等。

【讨论】:

  • 你是对的,在一个表格中,“Site”被格式化为数值,而在另一个表格中,它被格式化为 varchar...
  • 将它们都转换为整数 CAST(t1.Site as int)=CAST(t2.Site as int)
猜你喜欢
  • 2017-07-11
  • 1970-01-01
  • 2020-01-08
  • 2019-07-22
  • 2021-04-08
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2018-06-24
相关资源
最近更新 更多