сопоставление результатов запроса для агрегирования только под одним номером - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть очень простой скрипт, использующий базовый запрос, который возвращает строки результатов и успешно печатает их на лист Excel

    //Create and run query
    $sql = "
    SELECT Manager, count(*) as Items
      from itemCount
    where start_date >= '2019-01-01'
    group by Manager
    order by Manager";

    $result = odbc_exec($DB2Conn, $sql);

    $phpExcel = new PHPExcel;
    $sheet = $phpExcel->getActiveSheet();
    $sheet ->setTitle("Management Numbers");
    $sheet ->getColumnDimension('A') -> setAutoSize(true);
    $sheet ->getColumnDimension('B') -> setAutoSize(true);



    //Create header row
    $sheet->setCellValue('A1', 'Manager');
    $sheet->setCellValue('B1', 'Items');

    $rowCount = 2;

    while($row = odbc_fetch_array($result)){
        var_dump($row);
        $sheet->setCellValue('A'.$rowCount, $row['Manager']);
        $sheet->setCellValue('B'.$rowCount, $row['Items']);

        $rowCount++;
    }

    $writer = PHPExcel_IOFactory::createWriter($phpExcel, "Excel2007");
    $writer->save('Management Numbers.xlsx');

Вот проблема:

В настоящее время запрос возвращает правильные строкив этом формате:

Manager  |  Items
-----------------
12           5
13           2
16           3
11           7
18           4
19           8
22           1
21           7
32           4
53           3
25           5
75           2

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

Как я могу использоватьмассив для назначения менеджеров отделу, например

 1=>12,13,16 
 2=>11,18,19,22,21
 3=>32,53,25,75

, чтобы я получил электронную таблицу только с номерами отделов и агрегированными номерами назначенных менеджеров, например:

Manager  |  Items
------------------
1           41
2           91
3           185

1 Ответ

0 голосов
/ 24 февраля 2019

Для менеджеров с назначенными отделами вы можете создать массив типа

$manager_array['manager_id'][]='department_id';

$manager_array['1'][]=12;
$manager_array['1'][]=13;
$manager_array['1'][]=16;

или

$manager_array['1']=array(12,13,16);

Для получения количества менеджеров в каждом отделе подсчитайте $ manager_array ['manager_id'] как

count($manager_array[1]);

Вы также можете расширить таблицу itemCount с помощью столбца Department_id (если это возможно).

...