Dynamic Sql Pivot Две колонки таблицы - PullRequest
0 голосов
/ 25 июня 2018

Используя динамические сводные таблицы, я пытаюсь получить эту таблицу: http://www.sqlfiddle.com/#!18/9f1cf/47

Чтобы выглядеть примерно так: (Некоторые столбцы удалены для краткости, предположим, что я могу иметь один или несколько столбцов мимо "Выбранный"Совет ", это ожидаемый дизайн, но не ожидаемый результат)

Обратите внимание, что почтовые индексы могут быть нулевыми, могут делиться советами и могут повторяться в течение дней

+============+=======+================+============================+====================================+=========================+=====================+
| Call Date  |  Zip  | Chosen Council | Early Childhood Group Care | Development / Developmental Delays | Caregiver Mental Health | Behavioral Concerns |
+============+=======+================+============================+====================================+=========================+=====================+
| 2018-05-01 | 85000 | Maricopa North | null                       | 1                                  | 2                       | null                |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+
| 2018-05-01 | 85001 | Maricopa North | 1                          | null                               | null                    | null                |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+
| 2018-05-01 | null  | null           | null                       | 2                                  | null                    | null                |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+
| 2018-05-02 | 85000 | Maricopa North | null                       | 1                                  | 1                       | 3                   |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+
| 2018-05-02 | 85003 | Phoenix South  | null                       | null                               | null                    | 2                   |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+
| 2018-05-02 | 85004 | Phoenix South  | 1                          | 2                                  | null                    | 2                   |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+
| 2018-05-02 | null  | null           | null                       | 1                                  | 1                       | null                |
+------------+-------+----------------+----------------------------+------------------------------------+-------------------------+---------------------+

Я имеюя видел ряд вопросов, касающихся сводных таблиц, как жестко запрограммированных, так и динамических, и я до сих пор не понял их.

Здесь я смог получить динамическую сводную таблицу только для названий тем вызова и их количества.: http://www.sqlfiddle.com/#!18/9f1cf/39
Но это всего лишь одна строка для всего, но, похоже, он игнорирует также нули.

Здесь я попытался расширить вышеприведенное, и, хотя, похоже, он лучше,Я не понял, как прикрепить столбцы «Дата созыва», «Почтовый индекс» или «Выбранный совет»: http://www.sqlfiddle.com/#!18/9f1cf/37

Есть идеи, как мне это сделать?

ASCII Стол сделан с: Сделано с https://ozh.github.io/ascii-tables/

1 Ответ

0 голосов
/ 25 июня 2018

Может быть, вам нужно что-то вроде ниже

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', _callTopics.' + QUOTENAME(Name)
  FROM
  (
    SELECT
      _callTopics.Name
    FROM CallTopics AS _callTopics
    INNER JOIN CallTopicsPerRegion AS _callTopicsPerRegion
        ON _callTopics.Name = _callTopicsPerRegion.CallTopicName
    GROUP BY _callTopics.Name
  ) AS x;
SET @sql = N'
  SELECT CallDate
  ,Zip
  ,ChosenCouncil, ' + STUFF(@columns, 1, 2, '') + '
  FROM
  (
    SELECT _callTopics.Name, _callTopicsPerRegion.CallTopicCount,
    CallDate
  ,Zip
  ,ChosenCouncil
    FROM CallTopics AS _callTopics
    INNER JOIN CallTopicsPerRegion AS _callTopicsPerRegion
    ON _callTopics.Name = _callTopicsPerRegion.CallTopicName
  ) AS j
  PIVOT
  (
    SUM(CallTopicCount) FOR Name IN ('
    + STUFF(REPLACE(@columns, ', _callTopics.[', ',['), 1, 1, '')
    + ')
  ) AS _callTopics order by 1,2 ,3';
--PRINT @sql;
EXEC sp_executesql @sql;

Вот скриптовая ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...