ORA-00937: не групповая функция для группы сумм - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь подвести итог COUNT (IHID.RSID_PROD_N) по IHID.CS_ID, но столкнулся с проблемой. Как это решить?

SELECT 
  IHID.CS_ID ,IHID.RSID_PROD_N,COUNT(IHID.RSID_PROD_N),
  RSPF.RSPF_PROD_N,COUNT(RSPF.RSPF_PROD_N),sum(COUNT(IHID.RSID_PROD_N))
from IHIH 
JOIN IHID
  ON ihih.rsih_invoice_n = ihid.rsih_invoice_n AND ihih.cs_id = ihid.cs_id 
JOIN RSPF 
  ON ihih.cs_id = rspf.cs_id AND ihid.rsid_prod_n=rspf.rspf_prod_n
WHERE rspf_desc LIKE '%SCISSOR LIFT'
GROUP BY IHID.CS_ID, IHID.RSID_PROD_N,RSPF.RSPF_PROD_N,IHID.CS_ID;

Таблица примерно такая

16     SJIII4626    1      SJIII4626    1
16     SJIII4632    1      SJIII4632    1

Я хочу 1 + 1 = 2 для 16

Ответы [ 3 ]

0 голосов
/ 18 мая 2019

Один из вариантов - использовать ваш текущий запрос (почти без изменений) в качестве CTE, а затем применить SUM к COUNT, что вы не могли бы сделать вложенным способом. Примерно так:

with your_current_query as
  -- removed nested SUM(COUNT)
  (select 
     ihid.cs_id,
     ihid.rsid_prod_n,
     rspf.rspf_prod_n,
     count(ihid.rsid_prod_n) cnt_rsid
     count(rspf.rspf_prod_n) cnt_rspf
   from ihih join ihid on ihih.rsih_invoice_n = ihid.rsih_invoice_n 
              and ihih.cs_id = ihid.cs_id 
             join rspf on ihih.cs_id = rspf.cs_id 
              and ihid.rsid_prod_n=rspf.rspf_prod_n
   where rspf_desc like '%SCISSOR LIFT'
   group by ihid.cs_id, 
            ihid.rsid_prod_n,
            rspf.rspf_prod_n
  )
select cs_id,
       rsid_prod_n,
       rspf_prod_n,
       cnt_rsid,
       cnt_rspf,
       sum(cnt_rsid) sum_cnt_rsid   --> this represents nested SUM(COUNT)
from your_current_query
group by cs_id,
         rsid_prod_n,
         rspf_prod_n,
         cnt_rsid,
         cnt_rspf;
0 голосов
/ 19 мая 2019

Я думаю, вам нужны аналитические функции, а не агрегаты.Примерно так:

SELECT 
  IHID.CS_ID 
  ,IHID.RSID_PROD_N
  ,row_number() over (partition by IHID.CS_ID order by IHID.RSID_PROD_N) as IHID_RSID_PROD_N
  ,RSPF.RSPF_PROD_N
  ,row_number() over (partition by IHID.CS_ID order by RSPF.RSPF_PROD_N) as RSPF_RSPF_PROD_N
  ,COUNT(IHID.RSID_PROD_N) over (partition by IHID.CS_ID) as sum_count
from IHIH 
JOIN IHID
  ON ihih.rsih_invoice_n = ihid.rsih_invoice_n AND ihih.cs_id = ihid.cs_id 
JOIN RSPF 
  ON ihih.cs_id = rspf.cs_id AND ihid.rsid_prod_n=rspf.rspf_prod_n
WHERE rspf_desc LIKE '%SCISSOR LIFT'
;

Не совсем уверен, потому что в вашем вопросе отсутствует полный контрольный пример.

Если этот ответ не совсем то, что вам нужно, пожалуйста отредактируйте свой вопрос , чтобы предоставить структуры таблиц и образцы входных данных вместе с требуемыми выходными данными, полученными из этих данных.

0 голосов
/ 18 мая 2019

Это не группировка, как вы хотели бы из-за уникальных значений в IHID.RSID_PROD_N и RSPF.RSPF_PROD_N. Удалите эти столбцы, и они будут сгруппированы, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...