我有两个表rounded_column = df['time_column'].dt.round('15min').strftime("%H:%M")
和SalesTbl
。
CreditDepositsTbl
的列SalesNo,ItemDesc,SalesID SalesTbl
具有列ID,ItemDesc,SalesID
CreditDepositsTbl
有2行,其中SalesTbl
和
SalesID = 26112019/0004
有2行,其中CreditDepositsTbl
面临的挑战是,我想从SalesID = 26112019/0004
获得SalesNo, ItemDesc
和SalesID
,从SalesTbl
获得ID
。
我在查询中使用了内部连接关键字:
CreditDepositsTbl
查询返回6行而不是2行。请问我在做什么错。
答案 0 :(得分:0)
您是否尝试过使用DISTINCT?如:
select DISTINCT
sa.SalesNo, sa.ItemDesc, sa.SalesID, cd.ID
来自
SalesTbl sa
inner join
CreditDepositsTbl cd on cd.SalesID = sa.SalesID
where sa.SalesID = '26112019/0004'
另外,看看this
它使用JOIN进行了一对多的解释,应该为您要实现的目标提供清晰的路径。
答案 1 :(得分:0)
您将必须进行某种汇总才能使其正常工作。
select SalesID, TotSales,TotCCpmts
from (
Select SalesID,SUM(SalesAmount) TotSales
from SalesTbl
group by SalesID ) sa
join
(
select SalesID,SUM(CreditcardPayment) TotCCpmts
from CreditDepositsTbl
group by SalesID) cd on cd.SalesID = sa.SalesID
where sa.SalesID = '26112019/0004'
答案 2 :(得分:0)
这是一对二关系的预期结果。
所以汇总它们
SELECT sa.SalesNo, sa.ItemDesc, sa.SalesID
, COUNT(cd.ID) AS TotalCreditDeposits
, MIN(cd.ID) AS MinimumCreditDepositId
, MAX(cd.ID) AS MaximumCreditDepositId
FROM SalesTbl sa
JOIN CreditDepositsTbl cd
ON cd.SalesID = sa.SalesID
WHERE sa.SalesID = '26112019/0004'
GROUP BY sa.SalesNo, sa.ItemDesc, sa.SalesID
ORDER BY sa.SalesNo, sa.ItemDesc, sa.SalesID
但是对此有些感觉。
通常,当以表(例如SalesTbl.SalesID
)命名ID字段时,它通常是该表的主键。
而且主键不能重复。
但是您是否声称有2个SalesTbl.SalesID等于'26112019/0004'?
那么,这种没有外键的多对多关系不好吗?
答案 3 :(得分:0)
我解决了这个问题,之所以想要获得SalesNo,是为了能够用每个表中的SalesNo更新两个表。但是我找到了一种使用
直接将SalesNo插入CreditDepositsTbl的方法insert into CreditDeposits (CreditorID, DepositAmt, ItemDesc, ItemID, UnitPrice, Quantity, Amount,
TransDate, TransTime, SalesID, UserID, StockNo, ServerDate, ServerTime, Discount,
TransType, Returned, ReturnedQty, SalesNo, CreditorRep)
select CreditorID, 0, ItemDesc, ItemID, UnitPrice, Quantity, Amount,
SalesDate, SalesTime, SalesID, UserID, StockNo, SalesDate, SalesTime, 0,
'CREDIT', Returned, ReturnedQty, SalesNo, @CreditorRep from Sales where sales.SalesID=@SalesID
因此,无需从Sales表中获取SalesNo。我可以使用SalesNo来更新Sales和CreditDepositsTbl。
答案 4 :(得分:0)
将表连接到值不唯一的列上。因此,存在交叉连接模式。 当然,在一个表SalesID = 26112019/0004中,另一个表中有3次,而3 * 2 = 6。