У меня есть несколько CTE. CTE1A подсчитывает количество магазинов типа A в области 1. CTE1B подсчитывает количество магазинов типа B в области 1 и т. Д. До CTE1D. Аналогичным образом, CTE2B подсчитывает количество магазинов типа B в области 2 и т. Д. shop_types CTE выбирает все типы магазинов: A, B, C, D. Как отобразить таблицу, которая показывает для каждой области (столбца), сколько магазинов каждого типа есть (строк). Например:объединение результатов CTE
1 2 3 4 5
A 0 7 4 0 0
B 2 3 8 2 9
C 8 5 8 1 6
D 7 1 5 4 3
База данных содержит 2 таблицы:
Таблица регионов: shop_id, region_id
Таблица магазины: shop_id, shop_type
WITH
shop_types AS (SELECT DISTINCT shops.shop_type AS type FROM shops WHERE shops.shop_type!='-9999' AND shops.shop_type!='Other'),
cte1A AS (
SELECT regions.region_id, COUNT(regions.shop_id) AS shops_number, shops.shop_type
FROM regions
RIGHT JOIN shops
ON shops.shop_id=regions.shop_id
WHERE regions.region_id=1
AND shops.shop_type='A'
GROUP BY shops.shop_type,regions.region_id)
SELECT * FROM cte1A
Почему вы используете так много CTE, чтобы считать это? Вероятно, вы можете сделать это с условным подсчетом в одном заявлении. Но вы не предоставили никаких входных данных образца, никаких структур таблиц, и вы также забыли предоставить свой текущий запрос - это делает невозможным ответить. –
Я обновил вопрос. Надеюсь, теперь это яснее. База данных - это то, что я предоставил и не могу ее изменить. Точно так же я получил запросы, написанные так, как они были использованы уже в другом месте, но теперь мне нужно визуализировать результаты в одной таблице, как описано в вопросе. – krltos
Несвязанный, но: ваше внешнее соединение (в 'cte1a') не является внешним соединением, потому что у вас есть условие' where' на внешней объединенной таблице. Вы также не используете первый запрос «shop_types» в запросе. –