Your original Oracle(R) query (slightly reformatted):

SELECT IMRTAB.IMR906 AS NUM906
        , IMRTAB.IMRFLL AS FLL
        , SUM(IMRTAB.IMRCLL) AS CLL 
        , ROUND(SUM(IMRTAB.IMRDSC),2) AS DUR
        , ROUND(SUM(IMRTAB.IMRDSC)/SUM(IMRTAB.IMRCLL),2) AS PRO
        , SUM(IMRTAB1.IMRCLL) AS CLL_N
        , ROUND(SUM(IMRTAB1.IMRDSC),2) AS DUR_N
        , ROUND(SUM(IMRTAB1.IMRDSC)/SUM(IMRTAB1.IMRCLL),2) AS PRO_N
        , SUM(IMRTAB2.IMRCLL) AS CLL_R
        , ROUND(SUM(IMRTAB2.IMRDSC),2) AS DUR_R
        , ROUND(SUM(IMRTAB2.IMRDSC)/SUM(IMRTAB2.IMRCLL),2) AS PRO_R
FROM IMRTAB
        , IMRTAB IMRTAB1
        , IMRTAB IMRTAB2  /* here does the tables alias*/
WHERE IMRTAB.IMRIDE = IMRTAB1.IMRIDE (+) 
        AND IMRTAB.IMRIDE = IMRTAB2.IMRIDE (+) /* links by the uniqID both 
alias */
        AND (IMRTAB1.IMRTAR (+) = 'N') /* takes N calls and discard the 
rest for IMRTAB1 */
        AND (IMRTAB2.IMRTAR (+) = 'R') /* takes R calls and discard the 
rest for IMRTAB2 */
        AND (IMRTAB.IMRFLL BETWEEN '01/09/2004' and '10/09/2004') 
        AND (IMRTAB.IMRCLI=2584 AND (IMRTAB.IMR906=803xxxxxx )) 
GROUP BY IMRTAB.IMR906,IMRTAB.IMRFLL
ORDER BY IMRTAB.IMR906,IMRTAB.IMRFLL


My MySQL translation:

SELECT IMRTAB.IMR906 AS NUM906
        , IMRTAB.IMRFLL AS FLL
        , SUM(IMRTAB.IMRCLL) AS CLL 
        , ROUND(SUM(IMRTAB.IMRDSC),2) AS DUR
        , ROUND(SUM(IMRTAB.IMRDSC)/SUM(IMRTAB.IMRCLL),2) AS PRO
        , SUM(IMRTAB1.IMRCLL) AS CLL_N
        , ROUND(SUM(IMRTAB1.IMRDSC),2) AS DUR_N
        , ROUND(SUM(IMRTAB1.IMRDSC)/SUM(IMRTAB1.IMRCLL),2) AS PRO_N
        , SUM(IMRTAB2.IMRCLL) AS CLL_R
        , ROUND(SUM(IMRTAB2.IMRDSC),2) AS DUR_R
        , ROUND(SUM(IMRTAB2.IMRDSC)/SUM(IMRTAB2.IMRCLL),2) AS PRO_R
FROM IMRTAB
LEFT JOIN IMRTAB IMRTAB1
        ON IMRTAB.IMRIDE = IMRTAB1.IMRIDE
        AND IMRTAB1.IMRTAR = 'N' /* N calls only for IMRTAB1 */
LEFT JOIN IMRTAB IMRTAB2 
        ON IMRTAB.IMRIDE = IMRTAB2.IMRIDE
        AND IMRTAB2.IMRTAR = 'R' /* R calls only for IMRTAB2 */
WHERE IMRTAB.IMRFLL BETWEEN '2004-09-01' and '2004-09-10'
        AND IMRTAB.IMRCLI=2584 
        AND IMRTAB.IMR906=803xxxxxx
GROUP BY IMRTAB.IMR906,IMRTAB.IMRFLL
ORDER BY IMRTAB.IMR906,IMRTAB.IMRFLL


You were using the Oracle syntax ", ...(+)" to declare your outer joins. 
The equivalent MySQL form is "LEFT JOIN... ON ...".

http://dev.mysql.com/doc/mysql/en/JOIN.html


I also had to reformat the dates in your WHERE clause to be MySQL 
formatted:
'01/09/2004' (dd/mm/yyyy) =>> '2004-09-01' (yyyy-mm-dd)

http://dev.mysql.com/doc/mysql/en/Date_and_time_types.html
http://dev.mysql.com/doc/mysql/en/DATETIME.html


Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine
"martin fasani" <[EMAIL PROTECTED]> wrote on 09/28/2004 07:23:38 AM:

> 
> Hi guys,
> 
> I'm working in a telecom company that has Oracle for the call 
statistics.
> Now we export the daily stats to a remote mySql.
> 
> The daily resume table looks like this:
> 
+------------+-----------+-----------------+--------+----------------------+
> ----------+--------+--------+
> | IMRFLL     | IMR906    | IMRTER          | IMRTAR | IMRDUR   |
> IMRFAC   | IMRCLI | IMRCLL | 
> 
+------------+-----------+-----------------+--------+----------------------+
> ----------+--------+--------+
> | 2004-06-01 | 803xxxxxx |       xxxxxxxxx | N      | 
446.916666666666572 |
> 40355904 |     21 |     26 | 
> | 2004-06-01 | 803xxxxxx |               0 | R      | 9.416666666666664 
|
> 40355904 |     21 |     10 | 
> 
+------------+-----------+-----------------+--------+----------------------+
> ----------+--------+--------+
> 
> What I need it's to get a report that joins the table to itself two 
times to
> get the Normal tarif ( IMRTAR=N) and the Reduced tarif (IMRTAR=R).
> 
> In Oracle is done using Outer joins like this:
> SELECT IMRTAB.IMR906 AS NUM906,IMRTAB.IMRFLL AS FLL, SUM(IMRTAB.IMRCLL) 
AS
> CLL ,ROUND(SUM(IMRTAB.IMRDSC),2) AS DUR,
> ROUND(SUM(IMRTAB.IMRDSC)/SUM(IMRTAB.IMRCLL),2) AS PRO, 
SUM(IMRTAB1.IMRCLL)
> AS CLL_N,ROUND(SUM(IMRTAB1.IMRDSC),2) AS
> DUR_N,ROUND(SUM(IMRTAB1.IMRDSC)/SUM(IMRTAB1.IMRCLL),2) AS PRO_N,
> SUM(IMRTAB2.IMRCLL) AS CLL_R,ROUND(SUM(IMRTAB2.IMRDSC),2) AS
> DUR_R,ROUND(SUM(IMRTAB2.IMRDSC)/SUM(IMRTAB2.IMRCLL),2) AS PRO_R
> FROM IMRTAB, IMRTAB IMRTAB1, IMRTAB IMRTAB2  /* here does the tables 
alias
> */
> 
> WHERE IMRTAB.IMRIDE = IMRTAB1.IMRIDE (+) AND IMRTAB.IMRIDE = 
IMRTAB2.IMRIDE
> (+) /* links by the uniqID both alias */
> AND (IMRTAB1.IMRTAR (+) = 'N') /* takes N calls and discard the rest for
> IMRTAB1 */
> AND (IMRTAB2.IMRTAR (+) = 'R') /* takes R calls and discard the rest for
> IMRTAB2 */
> 
> AND (IMRTAB.IMRFLL BETWEEN '01/09/2004' and '10/09/2004') AND 
(IMRTAB.IMRCLI
> =2584 AND (IMRTAB.IMR906=803xxxxxx )) GROUP BY 
IMRTAB.IMR906,IMRTAB.IMRFLL
> ORDER BY IMRTAB.IMR906,IMRTAB.IMRFLL
> 
> And this query returns something like this:
> +-----------+------------+--------+--------+--------+--------+
> | NUM906    | FLL        | CLL    | DUR    | DUR_N  | CLL_N  | DUR_R  |
> CLL_R 
> +-----------+------------+--------+--------+--------+--------+
> | 803xxxxxx | 2004-09-02 |      1 |   4.30 |   4.30 |      1 | 
> | 803xxxxxx | 2004-09-01 |      2 |   0.00 |   0.00 |      2 |
> +-----------+------------+--------+--------+--------+--------+
> I took out some fields in this graphic just to simplify.
> 
> I've been trying to get this query running for mysql but I can get the 
same
> results and I kill the DB. Does someone knows if I can get the same 
result ?
> 
> Thanks is advance,
> MARTIN
> [EMAIL PROTECTED]
> 
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> 

Reply via email to