连接两个彼此不相关的表时获得重复行

问题描述 投票:0回答:1

我正在尝试进行一个查询,将 mix payment 表行与 soline 表行连接起来 与 soorder 表行连接。 mix payment 表是定制的,它与带有 ordernbr 和 ordertype 的 soorder 表相关 但它与 soline 表中的行无关。 所以当我使用这个查询加入他们时

select * from soorder o
inner join soline l on o.ordernbr = l.ordernbr and o.ordertype = l.ordertype 
inner join MixPayments m on m.OrderNbr = o.OrderNbr and m.OrderType = o.OrderType
where o.ordernbr = '0001' and o.companyid = 2 and l.companyid = 2 and m.CompanyID = 2

SOOrder表是这样的

Select * from SOOrder where ordernbr = '0001'
订单号 订单类型
0001 TC

SOLine表是这样的

Select * from SOLine where ordernbr = '0001'
订单号 订单类型 商品名称 商品价格
0001 TC 项目1 50
0001 TC 项目2 100
0001 TC 第3项 150
0001 TC 项目4 250

MixPayments 表是这样的

Select * from MixPayments  where ordernbr = '0001'
订单号 订单类型 付款方式 付款金额
0001 TC 签证 350
0001 TC 现金 200

它有 8 行,但只有四行,并且具有此 ordernbr 和类型的混合支付行只有两行 混合支付的第一行获取了 soline 的 4 行,然后混合支付的第二行再次获取了 soline 表的 4 行

结果是

订单号 订单类型 商品名称 商品价格 付款方式 付款金额
0001 TC 项目1 50 签证 350
0001 TC 项目2 100 签证 350
0001 TC 第3项 150 签证 350
0001 TC 项目4 250 签证 350
0001 TC 项目1 50 现金 200
0001 TC 项目2 100 现金 200
0001 TC 第3项 150 现金 200
0001 TC 项目4 250 现金 200

有没有办法获取不重复的数据? 因为当我尝试计算总价时,它给出了错误的总价。

我需要它像这样或任何其他不重复的方式就可以了

订单号 订单类型 商品名称 商品价格 付款方式 付款金额
0001 TC 项目1 50 签证 350
0001 TC 项目2 100 现金 200
0001 TC 第3项 150
0001 TC 项目4 250

我尝试了分组,但它没有给我我需要的结果

sql sql-server acumatica
1个回答
0
投票

您似乎想要一个显示订单中的商品的结果,并且您想要在其旁边显示另一个显示订单付款的结果。根据您的示例所需结果,您希望这些结果来自同一查询。

SQL 不是这样工作的。在 SQL 中,每个表和结果都显示相似事物的集合,在实体关系数据设计中称为“实体”。但你有两个不同的实体。"正� 75e1 ��您所说,付款与订单商品“无关”。

\n"

使用 SQL 实现此类目的的最佳方法是运行两个单独的查询,如果必须并排显示结果,则使用报告程序来显示结果。

编写 SQL 将这些不同的实体并排放置在单个查询的结果集中是可能的,但非常困难。

© www.soinside.com 2019 - 2024. All rights reserved.