我有两个表V和E,我需要做一个奇怪的LEFT JOIN。
在E表中有列:
COD_Obj有6个字母
COD_P有3个字母
在V表中有一列:
我尝试了以下查询:
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来查询它们。
答案 0 :(得分:0)
您应该能够在连接条件中添加一个长度,如下所示:
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]
FROM V
LEFT JOIN
E
ON (LEFT(V.P_OR_O,6)=E.COD_Obj AND LEN(IIF(ISNULL(P_OR_O),'',P_OR_O)) = 9)
OR (RIGHT(V.P_OR_O,3)=E.COD_P AND LEN(IIF(ISNULL(P_OR_O),'',P_OR_O)) = 12)
GROUP BY DSC
ORDER BY DSC