Сводная таблица SQL Server с подсчетами и суммами
Я пытаюсь заставить сводную таблицу SQL Server работать, что позволяет мне подсчитывать, а затем суммировать количество столбцов (всего 6). Цель сводной таблицы заключается в обобщении результатов онлайнового вопросника по любому числу производственных площадок. Есть 6 вопросов, которые могут иметь 3 значения результата - Target, Action и Fail. То, что я пытаюсь сделать, - это подсчитать количество целей, действий и неудач для каждого вопроса, а затем суммировать это для каждого. Так, например, производственная площадка A может есть 2 цели, 2 действия и 2 неудачи.
Я понимаю, что сводная таблица SQL Server может предоставить эту информацию, которая затем может отображаться в ASP.Net ReportViewer. Ниже приведен мой код, но он не работает и может сделать с некоторой экспертной помощью:
SELECT PRODUCTION_Site,
[Target],
[Action],
[Fail]
FROM
(SELECT Production_Site,
SUM(Coding),
SUM(Measurable),
SUM(Appearance),
SUM(Aroma),
SUM(Flavour),
SUM(Texture)
FROM t_Pqe_Grocery
GROUP BY Production_Site) AS T
PIVOT
(
COUNT(Coding) FOR Grocery_Packaging_And_Coding IN ([Target],[Action],[Fail])
COUNT(Measurable) FOR Grocery_Measurable IN ([Target],[Action],[Fail])
COUNT(Appearance) FOR Grocery_Appearance IN ([Target],[Action],[Fail])
COUNT(Aroma) FOR Grocery_Aroma IN ([Target],[Action],[Fail])
COUNT(Flavour) FOR Grocery_Flavour IN ([Target],[Action],[Fail])
COUNT(Texture) FOR Grocery_Texture IN ([Target],[Action],[Fail])) AS P
есть ли способ обойти это, или сводная таблица не подходит?
таблица
Production_Site,
Grocery_Packaging_And_Coding,
Grocery_Measurable,
Grocery_Appearance,
Grocery_Aroma,
Grocery_Flavour,
Grocery_Texture
данные в таблице будет такой:
Site A, Target, Action, Fail, Target, Target, Target
Site B, Target, Action, Fail, Target, Target, Target
Site C, Target, Target, Target, Target, Target, Target
Site A, Target, Target, Target, Target, Target, Target
результат, который я ищу is
Production_Site | Target | Action | Fail
Site A 10 1 1
Site B 4 1 1
Site C 6 0 0
1 ответов
гораздо проще выполнить этот запрос, чтобы применить оба UNPIVOT
а то PIVOT
функции:
select *
from
(
select Production_Site, value
from t_Pqe_Grocery
unpivot
(
value
for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,
Grocery_Appearance, Grocery_Aroma,
Grocery_Flavour, Grocery_Texture)
) unp
) src
pivot
(
count(value)
for value in ([Target], [Action], [Fail])
) piv
посмотреть SQL возиться с демо
на UNPIVOT
берет список столбцов и преобразует его в несколько строк, что делает его намного проще подсчитать:
select Production_Site, value
from t_Pqe_Grocery
unpivot
(
value
for col in (Grocery_Packaging_And_Coding, Grocery_Measurable,
Grocery_Appearance, Grocery_Aroma,
Grocery_Flavour, Grocery_Texture)
) unp
Unpivot Результат:
| PRODUCTION_SITE | VALUE |
----------------------------
| Site A | Target |
| Site A | Action |
| Site A | Fail |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site B | Target |
| Site B | Action |
| Site B | Fail |
| Site B | Target |
| Site B | Target |
| Site B | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site C | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
| Site A | Target |
затем применения PIVOT
для этого получите количество, которое вы хотите для каждого из PRODUCTION_SITE
s. После добавление PIVOT
результат:
| PRODUCTION_SITE | TARGET | ACTION | FAIL |
--------------------------------------------
| Site A | 10 | 1 | 1 |
| Site B | 4 | 1 | 1 |
| Site C | 6 | 0 | 0 |