以下查询应返回大约1159个结果,但只返回大约880个结果; 如果我只加入“c”宽度“mm”,我仍然可以得到1159个结果。只有当所有3个表格我得到880个结果。我也没有运气使用:RIGHT JOIN,RIGHT OUTER JOIN,LEFT OUTER JOIN,INNER JOIN。我试着用“()”和没有“()”的JOIN sintax也没有运气。我有一个查询做了2个左连接和1个GROUP BY,但我得到了缺少结果:
任何帮助表示赞赏
SELECT c.ccod, c.cetcm, c.cdscr, c.cpcul, c.cdent, mm.amexi,
Sum(CASE WHEN m.mcdmv=11 THEN m.mqtd END),
Sum(CASE WHEN m.mcdmv=2 THEN m.mqtd END),
Sum(CASE WHEN m.mcdmv=13 THEN m.mqtd END),
Sum(CASE WHEN m.mcdmv=14 THEN m.mqtd END),
MAX(CASE WHEN m.mcdmv=82 THEN m.mdata END)
FROM
(zzz.ccc c
LEFT JOIN zzz.mmmm mm ON c.crnp = mm.arncd)
LEFT JOIN zzz.mm m ON m.mrncd = c.crnp
WHERE
((c.cetcm='xcd') OR
(c.cetcm='ewfwe') OR
(c.cetcm='fewfew') OR
(c.cetcm='fewf')) AND
(m.MDATA Between 20100101 And 20110406) AND
((m.mcdmv=11) OR
(m.mcdmv=12) OR
(m.mcdmv=13) OR
(m.mcdmv=14)) AND
(mm.aarm=1)
GROUP BY c.ccod, c.cetcm, c.cdscr, c.cpcul, c.cdent, mm.amexi
ORDER BY c.ccod
给我们行计数不会帮助。如果你告诉我它应该返回7k行,为什么我要关心?什么是表/字段名称。 “GROUP BY”是最容易被误解的TSQL语法。 – JonH 2011-04-12 16:07:24
您需要记住由于'OUTER' Join所保留的行将对'm'和'mm'中的列具有NULL值。你的'WHERE'子句然后消除这些行。 – 2011-04-12 16:09:41
@Totty - 所以如果你完全评论Where子句,你仍然没有得到你想要的结果? Where条款的部分部分怎么评论?你需要将这些问题分解成小部分来隔离问题。 – Thomas 2011-04-12 16:10:25