2013-05-06 98 views
0

我有这两个查询,我需要作出一个单一的查询。 Keyfield1和TPOLNO应该是连接字段。我将如何去做这个单一的查询?如何使用内部联接使这两个查询成为单个查询?

SELECT TPOLNO, SUM(TTSAMT) AS SUM FROM PFPOSTR410 WHERE 
((TTRNYY=2012 AND TTRNMM=3 AND TTRNDD>=27) OR (TTRNYY=2012 AND TTRNMM>3) OR 
(TTRNYY=2013 AND TTRNMM<=2) OR (TTRNYY=2013 AND TTRNMM=3 AND TTRNDD<=27)) 
GROUP BY TPOLNO HAVING SUM(TTSAMT)>=5000 ORDER BY TPOLNO ASC 

SELECT KEYFIELD1, KEYFROBJ FROM CMRELATN WHERE RELROLETC=8 

预先感谢任何方向!

  • 乔希
+6

“始终代码,如果谁最终维护你的家伙代码将是一个暴力的精神病患者,他知道你住在哪里。“ – 2013-05-06 14:11:35

+0

我会尽力记住! – gtsouk 2013-05-06 14:15:03

+0

@Denis - 我在一段时间内得到的最好建议... – ResourceReaper 2013-05-06 14:38:28

回答

-1

如果我理解你的问题,你需要做一个简单的内加入2个表:

SELECT TPOLNO, SUM(TTSAMT) AS SUM, KEYFIELD1, KEYFROBJ 
FROM PFPOSTR410, CMRELATN 
WHERE 
    ((TTRNYY=2012 AND TTRNMM=3 AND TTRNDD>=27) OR (TTRNYY=2012 AND TTRNMM>3) OR 
(TTRNYY=2013 AND TTRNMM<=2) OR (TTRNYY=2013 AND TTRNMM=3 AND TTRNDD<=27)) 
    AND KEYFIELD1=TPOLNO 
    AND RELROLETC=8 
GROUP BY TPOLNO, KEYFIELD1, KEYFROBJ 
HAVING SUM(TTSAMT)>=5000 
ORDER BY TPOLNO ASC 
+0

是这是我所需要的非常多。我编辑了语句以从select子句中删除KEYFIELD1并将其添加到group by子句中。奇迹般有效!谢谢! – ResourceReaper 2013-05-06 14:41:08

+0

永远不要使用隐式连接来获取它们,它们是一个SQL反模式。 – HLGEM 2013-05-06 15:09:32

+0

由shoudl组成的组总是包含所有非聚合字段,即使mysql允许你做这样的错误事情。一般来说,这是使用两种SQL反模式技术的非常差的答案。我们不应该教会错误的做事方式。 – HLGEM 2013-05-06 15:12:13