2014-11-05 21 views
-1

問題我如何獲得這樣的,我可以在公司名稱行中抑制重複輸出..與分組

Example output: 

    Ref Company name  Total calls Last name   Calls No call 
----- ------------------- ----------- ------------ ---------- ------- 
    135 Dasher Services    12 Clarke    5 
             Wright    4 
             Turner    3 
    142 Diaphonic Shipping   12 Hill     5 
             Johnson    5 
             Butler    2 
             Jackson    0 ******* 
    107 Juan and Co.     12 White     4 
             Turner    3 
             Clarke    3 
             Roberts    2 

查詢:

SELECT CUSTOMERS.CUSTOMER_ID AS REF, 
     CUSTOMERS.COMPANY_NAME, 
     COUNT (CALLS.CALL_REF) AS TOTAL_CALLS, 
     CALLERS.CALLER_LAST_NAME AS LAST_NAME, 
     COUNT(CALLS.CALL_REF)AS CALLS 
    FROM CUSTOMERS 
    INNER JOIN CALLERS 
    ON COMPANY_ID=CUSTOMER_ID 
    LEFT JOIN CALLS 
    ON CALLERS.CONTACT_ID=CALLS.CONTACT_ID 
    GROUP BY CUSTOMERS.CUSTOMER_ID, 
      CUSTOMERS.COMPANY_NAME, 
      CALLERS.CALLER_LAST_NAME 
    ORDER BY REF, COMPANY_NAME, CALLS DESC; 

產生這些結果:

 REF COMPANY_NAME     TOTAL_CALLS LAST_NAME     CALLS 
---------- ------------------------------ ----------- -------------------- ---------- 
     100 Haunt Services       4 Anderson      4 
     100 Haunt Services       4 Penrice      4 
     100 Haunt Services       3 Best       3 
     100 Haunt Services       2 Williams      2 
     100 Haunt Services       2 Lewis       2 
     101 Genus Ltd.        4 Phillips      4 
     101 Genus Ltd.        3 Parker      3 
     101 Genus Ltd.        2 Davies      2 
     101 Genus Ltd.        2 Johnson      2 
     102 Corps Ltd.        4 Gritten      4 
     102 Corps Ltd.        2 Scott       2 
     103 Train Services       7 Lawson      7 
     103 Train Services       2 Roberts      2 

SQLFiddle here

+0

你可能需要創建一個報告,將利用集團,如列組頭。這取決於你使用的平臺。 – Bobort 2014-11-05 22:38:03

+0

您是否在尋找直接的SQL解決方案? – enl8enmentnow 2014-11-05 22:41:03

+0

是的,如果可以的話,請加入? – 2014-11-05 22:46:20

回答

0

我沒有測試過,但它的工作:

SELECT case when lag(CUSTOMERS.COMPANY_NAME, 1, null) over 
       (partition by CUSTOMERS.COMPANY_NAME 
        order by COMPANY_NAME, COUNT(CALLS.CALL_REF) DESC) is null 
      then CUSTOMERS.COMPANY_NAME else null end cmp_name, 
     CUSTOMERS.CUSTOMER_ID AS REF, 
     CUSTOMERS.COMPANY_NAME, 
     COUNT (CALLS.CALL_REF) AS TOTAL_CALLS, 
     CALLERS.CALLER_LAST_NAME AS LAST_NAME, 
     COUNT(CALLS.CALL_REF)AS CALLS 
    FROM CUSTOMERS 
    INNER JOIN CALLERS 
    ON COMPANY_ID=CUSTOMER_ID 
    LEFT JOIN CALLS 
    ON CALLERS.CONTACT_ID=CALLS.CONTACT_ID 
    GROUP BY CUSTOMERS.CUSTOMER_ID, 
      CUSTOMERS.COMPANY_NAME, 
      CALLERS.CALLER_LAST_NAME 
    ORDER BY REF, COMPANY_NAME, CALLS DESC; 
+0

'LAG()'中的'-1'對我來說看起來很可疑... – 2014-11-06 00:13:34

+0

謝謝你的回答,但是我似乎無法得到它的工作,因爲組通過doesn 't正確的工作.. – 2014-11-06 00:13:58

+0

@Bob賈維斯,是的,我很少使用滯後和主導功能,這裏是一個錯誤。 – Dmitry 2014-11-06 07:56:37