2016-02-15 3 views
1

Я пытаюсь объединить два запроса, чтобы показать лучшие 5 кодов клиентов, но я продолжаю получать ошибку, SQLSTATE 42601. В идеале я хотел бы, чтобы запрос показывал что-то подобное.Помощь союза по DB2

LTIHONIA CLIENT 1 1330 
LITHOINA CLIENT 2 1300 
LITHONIA CLIENT 3 1000 
ATHENS CLIENT 1 1330 
ATHENS CLIENT 2 1000 
ATHENS CLIENT 3 400 

SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE FROM AR_SUM AR, TLORDER WHERE AGING_DATE >= '1/1/2016' AND AR.BILL_NUMBER = TLORDER.BILL_NUMBER 
AND CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE1' 
GROUP BY CLIENT_ID 
ORDER BY REVENUE DESC 
FETCH FIRST 5 ROWS ONLY 
UNION 
SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE FROM AR_SUM AR, TLORDER WHERE AGING_DATE >= '1/1/2016' AND AR.BILL_NUMBER = TLORDER.BILL_NUMBER 
AND CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE10' 
GROUP BY CLIENT_ID 
ORDER BY REVENUE DESC 
FETCH FIRST 5 ROWS ONLY 
+0

Я думаю, что тип зарезервирован для изменения слова в формате ftype. – danny117

ответ

0

Попробуйте использовать круглые скобки вокруг подзапросов:

(SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE 
FROM AR_SUM AR JOIN 
     TLORDER 
     ON AR.BILL_NUMBER = TLORDER.BILL_NUMBER 
WHERE AGING_DATE >= '1/1/2016' AND CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE1' 
GROUP BY CLIENT_ID 
ORDER BY REVENUE DESC 
FETCH FIRST 5 ROWS ONLY 
) UNION 
(SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE 
FROM AR_SUM AR JOIN 
     TLORDER 
     ON AR.BILL_NUMBER = TLORDER.BILL_NUMBER 
WHERE AGING_DATE >= '1/1/2016' AND 
     CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE10' 
GROUP BY CLIENT_ID 
ORDER BY REVENUE DESC 
FETCH FIRST 5 ROWS ONLY 
) 

Кроме того, вы должны научиться использовать правильный явный JOIN синтаксис. Простое правило: Никогда запятые запятые в разделе FROM. И, UNION ALL, вероятно, более уместен, чем UNION, если вы не намерены удалять дубликаты.

+0

, как ни странно, мне говорят, что я должен войти в систему как владелец схемы для запуска этого запроса ... – OVO

+0

@OVO. , , Вероятно, это проблема с разрешениями на схему/таблицы. –

0

@OVO

Я уверен, что ваш запрос имеет ошибку 42601 из-за того, по п. Вы не можете получить запрос на объединение. Удалить порядок заказа из обоих sqls & поместить затем, как выбрать поля из (ВАШ СОЮЗ SQL) по bla bla.

Смежные вопросы