我在SQL DB中有以下表格
车辆, RepairCharges, TowCharges,
车辆总是只有1条记录,而其他表格则只有多条记录。我当前的LEFT OUTER Join工作但是如果连接表中有多个条目,那么它返回的行数就相同。
我的问题是,我需要创建一个将加入这些表的SQL视图,但是只返回Vehicle Table的单个记录,即使连接表中有多个记录也是如此。这是可能的VIEW,还是我必须使用不同的方法?
编辑:从答案中,我意识到,正如我原先想的那样,这不可能通过设计实现。鉴于相同的情况,你会如何处理这个?
最终结果是每张车的表格显示1行,并且同一行显示第一次拖车和维修费用,如果有更多拖车或修理费用,则显示每行的新行,复制车辆信息。
答案 0 :(得分:6)
否,除非您使用AGGREGATE函数,否则从1到MANY的连接将作为设计返回1到MANY。
你是否有具体的,例如只返回潜在的,或者最昂贵的。
显示您的查询,并指定您需要的许多内容。
答案 1 :(得分:4)
JOIN的结果将始终包含左侧的记录数乘以右侧的记录数。这是JOIN定义的一部分,如果你把它作为一个视图或保持它的临时SQL,它不会改变任何东西。
您需要做的是更改已加入的内容,因此它只有一行。您需要表达一个标准,从许多可能的候选人中选择您感兴趣的RepairCharges和TowCharges中哪些可能的行。上次约会?最高收费?最接近满月阶段?然后你只加入那个行。
示例:
SELECT * FROM Vechicles
CROSS APPLY (
SELECT TOP (1) *
FROM RepairCharges
WHERE VechicleID = Vechicles.VechicleID
ORDER BY RepairDate DESC) AS LastRepair;
答案 2 :(得分:2)
除了汇总之外,您可以尝试在查询中添加DISTINCT
子句。