Sql 如何构造查询以合并给定期间内的主明细记录

Sql 如何构造查询以合并给定期间内的主明细记录,sql,sql-server-2017,sql-server-2016-express,Sql,Sql Server 2017,Sql Server 2016 Express,考虑以下场景(如果它有助于思考Northwind订单/订单详细信息) 我有两个表LandingHeaders和LandingDetails,它们记录商业捕鱼旅行的详细信息。通常,在一周的时间里,一艘渔船可以出海几次,因此最终会有几次登陆头/登陆细节记录 在每个周末,购买这些捕鱼旅行结果的公司需要计算出每艘船只每次登陆的价值,然后向该船只的船东支付任何到期款项。为了增加乐趣,有些船只属于同一个人,因此,如果将某个人拥有的所有船只的所有登岸价值合并为一笔付款,那么购买鱼的公司更愿意这样做 到目前为止

考虑以下场景(如果它有助于思考Northwind订单/订单详细信息)

我有两个表LandingHeaders和LandingDetails,它们记录商业捕鱼旅行的详细信息。通常,在一周的时间里,一艘渔船可以出海几次,因此最终会有几次登陆头/登陆细节记录

在每个周末,购买这些捕鱼旅行结果的公司需要计算出每艘船只每次登陆的价值,然后向该船只的船东支付任何到期款项。为了增加乐趣,有些船只属于同一个人,因此,如果将某个人拥有的所有船只的所有登岸价值合并为一笔付款,那么购买鱼的公司更愿意这样做

到目前为止,执行此任务所需的信息分布在一个简单的主-详细表结构中,因此它需要几个存储过程(以及在执行此任务的主应用程序中明智地使用字典)来实现所需的最终结果。我无法控制的外部环境迫使我对数据库进行了一些重大更改,我借此机会重新构造了LandingHeader表,以便它包含可能需要的所有必要信息

从平台标题表中,我需要记录以下字段

  • sql类型为int的LandingHeaderId
  • sql类型为int的VesselOwnerId
  • sql类型datetime的LandingDate(实际上只是用作查询的一部分)
  • 从LandingDetails表中,我需要记录以下字段

  • sql类型为int的ProductId
  • sql类型小数的数量(10,2)
  • sql类型货币的单价
  • 我一直在考虑创建一个以VesselOwnerID、SartDate和EndDate为参数的查询


    作为输出,我需要知道哪些LandingId与所有者关联,以及给定期间与LandingHeader关联的各种landingDetails中每个不同ProductId的总数量(以及在选定期间内每个ProductId的单价相同)

    我一直在考虑可能看起来有点像这样的输出行;

    这类事情可以从标准的主-详细类型表关系中完成,还是仍然需要使用多个存储过程


    一个更长期的目标是创建一个查询,该查询可用于生成可与web api配合使用的xml。

    “以及在所选时间段内每个ProductId的相同单价”,在我看来,这似乎是一场潜在的灾难。你绝对肯定在给定的时间段内单价不会改变吗?@ZoharPeled绝对肯定。每个productid的价格根据市场回报在一周内进行汇总。所选期间将始终为一周,而且是与该定价期间一致的一周。商业规则已经存在,以确保这一点。@ZoharPeled我应该问,是什么让你认为相同的单价可能会,或者会是一场灾难?更重要的是,如果不是,如何确保为每个产品id计算出绝对正确的金额?实际上,这很简单。您存储每次着陆的每个产品的单价,对吗?您所要做的就是将其添加到查询的group by子句中,这样,如果您在两个不同的着陆中有相同的产品,并且有两个不同的单价,那么它将出现在结果集中的两个不同的行中-每个单价一行。如果您可以将您的问题包含为+的样本数据。我可能会回答。