2014-11-19 2 views
1

Я использую DB2. У меня есть этот запрос:db2 конкретный запрос для подсчета различных строк

SELECT DISTINCT 
ORDER_NUMBER, 
trdm as TRADEMARK, 
cmdnsm as CUSTOMER_NAME 
FROM DB1.ORDFA 
JOIN DB2.CCADF ON SFORD# = WDRSO 
JOIN DB2.DADA06 ON WD3ADF = WD3FLA 
JOIN DB1.CMP1 ON C1LK2 = SF2LK 
WHERE YEAR = '14' AND PART = '5484' 
ORDER BY CUSTOMER_NAME, TRADEMARK 

и я получаю этот набор результатов из приведенного выше запроса

order_number trademark  customer_name 
    2220824.  AIR   EPR PRODUCTS INC 
    2254614.  AVALON  EPR PRODUCTS INC 
    2214146.  AVALON  EPR PRODUCTS INC 
    2338002.  AVALON  EPR PRODUCTS INC 
    2102733.  BOSS   EPR PRODUCTS INC 
    2286148.  CDC   EPR PRODUCTS INC 
    2116148.  CDC   EPR PRODUCTS INC 
5.  HC   SUMMLC 
    2014046.  HC   SUMMLC 
    2232312.  SDEXO   SUMMLC 
    2267369.  SDEXO   SUMMLC 
    2085280.  SDEXO   SUMMLC 
    2170433.  SDEXO   SUMMLC 
    2179283.  SDEXO   SUMMLC 
    2378745.  SDEXO   SUMMLC 

Что мне нужно это запрос DB2, который дал бы мне этот набор результатов:

NUM_ORDERS  TRADEMARK  CUSTOMER_NAME 
    6   SDEXO   SUMMLC 
    3   AVALON   EPR PRODUCTS INC 
    2   CDC   EPR PRODUCTS INC 
    2   HC    SUMMLC 
    1   BOSS   EPR PRODUCTS INC 
    1   AIR   EPR PRODUCTS INC 

ответ

4

Если DB2 поддерживает стандарт ansi sql, я считаю, что все, что вам нужно, это добавить count и group by:

SELECT 
    COUNT(DISTINCT ORDER_NUMBER) AS NUM_ORDERS, 
    trdm as TRADEMARK, 
    cmdnsm as CUSTOMER_NAME 
FROM DB1.ORDFA 
JOIN DB2.CCADF ON SFORD# = WDRSO 
JOIN DB2.DADA06 ON WD3ADF = WD3FLA 
JOIN DB1.CMP1 ON C1LK2 = SF2LK 
WHERE YEAR = '14' AND PART = '5484' 
GROUP BY trdm, cmdnsm 
ORDER BY NUM_ORDERS DESC, CUSTOMER_NAME, TRADEMARK 
+0

Казалось бы, как это будет работать, но db2 не нравится выражение счетчика в операторе отбора. Я думаю, что мне понадобится составной элемент, подобный этому http://stackoverflow.com/questions/5247378/how-do-i-do-count-with-a-group-by-clause-in-db2 – Angelo

+0

@Angelo Хмм хорошо. Документация DB2 предполагает, что она должна работать, вы получили сообщение об ошибке при ее запуске? – jpw

+0

@ Ангело. , , Что такое тип данных 'ORDER_NUMBER'? 'COUNT()' работает практически для всех типов данных, за исключением некоторых необычных, таких как blobs. Если 'COUNT (ORDER_NUMBER)' не работает, попробуйте 'COUNT (*)'. –

2

попробовать что-то вроде этого:

SELECT COUNT(DISTINCT ORDER_NUMBER) AS ORDER_NUMBER, 
TRADEMARK, 
CUSTOMER_NAME 
FROM DB1.ORDFA 
JOIN DB2.CCADF ON SFORD# = WDRSO 
JOIN DB2.DADA06 ON WD3ADF = WD3FLA 
JOIN DB1.CMP1 ON C1LK2 = SF2LK 
WHERE YEAR = '14' AND PART = '5484' 
GROUP BY CUSTOMER_NAME, TRADEMARK 
ORDER BY ORDER_NUMBER DESC 
Смежные вопросы