Как вывести результаты на основе года запроса?

У меня есть запрос:

<cfquery  name="pivotquery">
  SELECT employeedept,cse_name,YEAR,January,February,March,April,May,June,July,August,September,October,November,December
  FROM (
        SELECT month= datename(month,execoffice_date) 
              , YEAR =YEAR(execoffice_date)
              ,  employeedept
              , COUNT(*) as 'totalstars'
        FROM CSEReduxResponses
        WHERE execoffice_status = 1
        GROUP BY  employeedept
               , month(execoffice_date)
               , YEAR(execoffice_date)
               , DATENAME(month,execoffice_date)
      ) 
      AS r 

      JOIN csedept d ON d.cse_dept = r.employeedept

  PIVOT
    (
        SUM(totalStars)
        FOR [month] IN  (
                [January],[February],[March],[April],
                [May],[June],[July],[August],
                [September],[October],[November],[December]
        )
    ) 
    AS pvt

</cfquery>

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

<table >
<thead>
<tr>
    <th>Department</th>
    <th>January</th>
    <th>Frebruary</th>
    .........
</tr>
</thead>
<tbody>
    <cfoutput query="pivotquery" >
    <tr>
        <td>#pivotquery.csedept_name#</td>
        <td>#pivotquery.January#</td>
        <td>#pivotquery.February#</td>
        ....... 
    </tr>
    </cfoutput>
</tbody>
</table>

Да правильно выводит данные. Как заставить его выводить результаты в отдельную таблицу по годам?

Если вы посмотрите на этот sqlfiddle, он содержит данные за 2014 и 2015 годы. Поэтому я хотел бы создать отдельную таблицу для каждого года. Таким образом, с данными, которые я создал в sqlfiddle, у него будет 2 таблицы: одна для 2014 и 2015 годов.


person user3591637    schedule 09.06.2014    source источник
comment
Я посмотрел на скрипку и не увидел ничего полезного. Что должно войти в годовые таблицы, месячные итоги за год или годовой итог?   -  person Dan Bracuk    schedule 09.06.2014
comment
Я думаю, что сайт sqlfiddle не работает или что-то в этом роде, это то, что вы имеете в виду, говоря, что ничего полезного не увидели?   -  person user3591637    schedule 09.06.2014
comment
Их сайт должен быть недоступен или иметь проблемы. В настоящее время он либо выдает ошибку, либо пустую страницу для меня.   -  person Leigh    schedule 09.06.2014


Ответы (1)


Зависит от того, как вы хотите, чтобы вещи отображались. Но поскольку похоже, что ваши данные упорядочены по годам, вы должны иметь возможность отображать по годам, группируя свой cfoutput по годам. Итак, что-то вроде:

<cfoutput query="pivotquery" group="YEAR">
<table >
<thead>
    <tr>
        <th>Department for #pivotquery.YEAR#</th>
    <th>January</th>
    <th>Frebruary</th>
    .........
    </tr>
</thead>
    <tbody>
        <cfoutput>
            <tr>
            <td>#pivotquery.csedept_name#</td>
            <td>#pivotquery.January#</td>
    <td>#pivotquery.February#</td>
    ....... 

            </tr>
        </cfoutput>
    </tbody>
</table>
</cfoutput>
person Snipe656    schedule 09.06.2014
comment
на самом деле запрос не упорядочен по годам, он просто выводит его в sqlfiddle вот так, но спасибо - person user3591637; 09.06.2014
comment
Затем просто убедитесь и либо измените запрос, чтобы упорядочить его по годам, либо выполните QoQ, чтобы повторно отсортировать результаты запроса. Я только отметил это выше, потому что не был уверен, что ваш сервер БД был или всегда будет возвращать его по годам. - person Snipe656; 09.06.2014
comment
(Редактировать) @ user3591637 - Да, но вам не нужен QoQ. Просто добавьте порядок в свой sql-запрос. Не забудьте сначала упорядочить по году, а затем по любым другим столбцам (название отдела и т. д.). В противном случае группа не будет работать должным образом. Кроме того, я бы рекомендовал не использовать зарезервированные слова, такие как месяц или год, в качестве имен столбцов. Я использовал MonthName и YearNo в исходном примере< /а>. - person Leigh; 09.06.2014
comment
Я мало работаю с SQL Server, поэтому никогда не использовал Pivot, но если он не работает с заказом или использует интересные методы, чтобы заставить его работать, вот почему я упомянул QoQ. Я согласен с использованием разных имен столбцов, поскольку в противном случае вам может понадобиться использовать кавычки или квадратные скобки вокруг существующих в некоторых ситуациях, поскольку зарезервированные имена. - person Snipe656; 09.06.2014