我有两个表 V 和 E,我需要做一个奇怪的 LEFT JOIN。
在 E 表中有列:
有 6 个字母的 COD_Obj
有 3 个字母的 COD_P
在 V 表中有一列:
- as可以互斥的O_OR_P
- 一个包含 9 个字母并将其前 6 个字母与 E.COD_Obj 匹配的 Obj
- 一个包含 12 个字母的 P,并将其最后 3 个字母与 E.COD_P 匹配
我尝试了以下查询:
SELECT DSC,
COUNT(IIF([Cost] IS NOT NULL, 1, NULL)) AS [N Cost]
, INT(SUM(IIF([Cost] IS NOT NULL, [Cost], 0))) AS [Total Cost]
, INT(SUM(IIF([Fees] IS NOT NULL, Fees, 0))) AS [Total Fees]
LEFT JOIN E ON LEFT(V.P_OR_O,6)=E.COD_Obj
OR RIGHT(V.P_OR_O,3)=E.COD_P
GROUP BY DSC
ORDER BY DSC
它确实分组正确,但每个组返回太多的 N 成本、总成本和总费用。我怀疑这个查询的结果有重复的东西。
如果我将 LEFT JOIN 的 OR 更改为 AND,我将只看到一行,只对应一个组。
我感到眼花缭乱和困惑。请帮助了解如何使用两个替代标准进行匹配。而且,在你问之前,是的,V.P_OR_O 字段可以有空/空值。
不,我现在不能改变数据模型,因为人们依赖这个数据库,我无法控制服务器重新定义数据库结构。
这些表都在 SQL 服务器中,我正在使用 Microsoft Office 的 Access 来查询它们。