2016-01-08 1 views
0

Таблица XRDK/WHSHIPP_R3 имеет 4 столбца - ZNWHSE, ZNSITE, ZNMANE, ZNRECD и всего 1 071 запись.DB2 SQL: как «подсчитывать» количество записей, возвращаемых условием наличия

Я выделил номера ZNMANE, которые использовались более одного раза;

SELECT ZNMANE FROM XRDK/WHSHIPP_R3 
GROUP BY ZNMANE     
HAVING (COUNT(ZNMANE) >1)   
ORDER BY 1 

Я хотел бы получить общее количество этих изолированных записей, но если я его изменю;

SELECT COUNT(ZNMANE) FROM XRDK/WHSHIPP_R3 
GROUP BY ZNMANE     
HAVING (COUNT(ZNMANE) >1)   
ORDER BY 1 

Я просто получаю нагрузку в 2 с, которая должна быть индивидуальной для каждой записи ZNMANE.

Я пробовал это;

SELECT ZNMANE FROM XRDK/WHSHIPP_R3 
GROUP BY ZNMANE     
HAVING (COUNT(ZNMANE) >1)   
ORDER BY 1       
UNION ALL 
SELECT COUNT(ZNMANE) FROM XRDK/WHSHIPP_R3 

Но это вернуло 1071 в верхней части, так что, я думаю, он просто подсчитал весь файл. Есть идеи?

ответ

2

О методе является подзапрос:

SELECT COUNT(*) 
FROM (SELECT ZNMANE 
     FROM XRDK/WHSHIPP_R3 
     GROUP BY ZNMANE     
     HAVING COUNT(ZNMANE) > 1  
    ) z 

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

 SELECT ZNMANE, COUNT(*) OVER() as NumTotal 
     FROM XRDK/WHSHIPP_R3 
     GROUP BY ZNMANE     
     HAVING COUNT(ZNMANE) > 1  
+0

Первая часть именно то, что я хотел - спасибо. Вторая часть не работает; говорит, что токен (в пределах over() недействителен - действительные маркеры - FROM INTO, но я уже знаю, что счетчик для каждого ZNMANE равен 2 в любом случае. Спасибо за вашу помощь – RDKells

0

Группа по обычно нуждается в критерии (то, что вы хотите сгруппировать ZNMANE в этом случае) и совокупность (COUNT в этом случае).

Я думаю, ваш первый запрос должен выглядеть более похожим

SELECT ZNMANE 
    , COUNT(1) 
    FROM XRDK/WHSHIPP_R3 
GROUP 
    BY ZNMANE 
HAVING (COUNT(1) > 1) 
ORDER 
    BY 1 

Вы можете попробовать это и посмотреть, если вы получите то, что вам нужно ..

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