2013-05-25 3 views
0

У меня есть следующий запрос, когда я запускаю его поверх редактора mysql, он дает ошибку «недопустимое использование группы» при использовании в отчетах jasper, он не вызывает никаких ошибок? что случилось с запросом?Недопустимое использование группы в mySql

SELECT CUSTOMERS.TAXID, 
CUSTOMERS.NAME AS CUSTOMER, 
CATEGORIES.NAME AS CATEGORY, 
PRODUCTS.REFERENCE, 
PRODUCTS.NAME AS PRODUCT, 
SUM(TICKETLINES.UNITS) AS UNIT, 
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) AS TOTAL, 
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE)/SUM(TICKETLINES.UNITS) AS MEANPRICE, 
PRODUCTS.PRICEBUY AS BUYPRICE, 
((SUM(SUM(TICKETLINES.PRICE)/SUM(TICKETLINES.UNITS)) - PRODUCTS.PRICEBUY) * TICKETLINES.UNITS) AS PROFITLOSS 
FROM TICKETS 
LEFT OUTER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID, TICKETLINES 
LEFT OUTER JOIN PRODUCTS ON TICKETLINES.PRODUCT = PRODUCTS.ID 
LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID 
WHERE RECEIPTS.ID = TICKETS.ID AND 
TICKETS.ID = TICKETLINES.TICKET AND 
CATEGORIES.ID = PRODUCTS.CATEGORY 
GROUP BY CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID 
ORDER BY CUSTOMERS.NAME, 
CATEGORIES.NAME, 
PRODUCTS.NAME 
+0

Вы добавляете условия на стол под названием 'RECEIPTS', но это не так присоединился в любом месте. –

ответ

3

Это, кажется, потому что вы делаете сумму в пределах суммы в profitloss выводе; есть также условие в предложении where, который воспроизводит join состояние, а другой псевдоним receipt не упоминается в другом месте - вместо этого, попробуйте:

SELECT CUSTOMERS.TAXID, 
     CUSTOMERS.NAME AS CUSTOMER, 
     CATEGORIES.NAME AS CATEGORY, 
     PRODUCTS.REFERENCE, 
     PRODUCTS.NAME AS PRODUCT, 
     SUM(TICKETLINES.UNITS) AS UNIT, 
     SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) AS TOTAL, 
     SUM(TICKETLINES.UNITS * TICKETLINES.PRICE)/SUM(TICKETLINES.UNITS) AS MEANPRICE, 
     PRODUCTS.PRICEBUY AS BUYPRICE, 
     SUM((TICKETLINES.PRICE - PRODUCTS.PRICEBUY) * TICKETLINES.UNITS) AS PROFITLOSS 
FROM TICKETS 
JOIN TICKETLINES ON TICKETS.ID = TICKETLINES.TICKET 
LEFT OUTER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID 
LEFT OUTER JOIN PRODUCTS ON TICKETLINES.PRODUCT = PRODUCTS.ID 
LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID 
GROUP BY CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID 
ORDER BY CUSTOMERS.NAME, CATEGORIES.NAME, PRODUCTS.NAME 
+0

Ничего себе, это удивительно работает, но я должен был добавить RECEIPT.ID после CATEGORIES.ID в LEFT OUTER JOIN, хотя я не знаю причины ... – Saqib

0

Вы должны иметь все поля группы внутри выбранной группы:

SELECT CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID,CUSTOMERS.TAXID, 
CUSTOMERS.NAME AS CUSTOMER, 
CATEGORIES.NAME AS CATEGORY, 
PRODUCTS.REFERENCE, 
PRODUCTS.NAME AS PRODUCT, 
SUM(TICKETLINES.UNITS) AS UNIT, 
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE) AS TOTAL, 
SUM(TICKETLINES.UNITS * TICKETLINES.PRICE)/SUM(TICKETLINES.UNITS) AS MEANPRICE, 
PRODUCTS.PRICEBUY AS BUYPRICE, 
((SUM(SUM(TICKETLINES.PRICE)/SUM(TICKETLINES.UNITS)) - PRODUCTS.PRICEBUY) * TICKETLINES.UNITS) AS PROFITLOSS 
FROM TICKETS 
LEFT OUTER JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID, TICKETLINES 
LEFT OUTER JOIN PRODUCTS ON TICKETLINES.PRODUCT = PRODUCTS.ID 
LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID 
WHERE RECEIPTS.ID = TICKETS.ID AND 
TICKETS.ID = TICKETLINES.TICKET AND 
CATEGORIES.ID = PRODUCTS.CATEGORY 
GROUP BY CUSTOMERS.ID, CATEGORIES.ID, PRODUCTS.ID 
ORDER BY CUSTOMERS.NAME, 
CATEGORIES.NAME, 
PRODUCTS.NAME 
+0

ту же ошибку bro: | – Saqib

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