2015-04-14 4 views
0

У меня есть несколько таблиц, каждая из которых имеет отношения FK, которые соединяют их друг с другом. Мне нужно создать сводную таблицу, используя данные из некоторых таблиц.Beginner Oracle 11g SQL - создать сводную таблицу из объединения нескольких таблиц

Region Table 
Region_ID|Region_Description 

State Table 
State_ID|State_Description|Region_ID_FK 

Order Table 
Order_ID|Order_Date|State_ID_FK 

Category Table 
Category_ID|Category|Description|Order_ID_FK 

Я присоединяюсь ко всем таблицам, используя естественное соединение, основанное на FK.

Мне нужно определить, сколько заказов в каждой категории для каждого региона.

Полученная таблица должна выглядеть следующим образом:.

Category|Region1|Region2|Region3|Total 
Sporting 1  0  3  4 
ETC   0  2  1  3 
+1

Отлично Что вы пробовали? – OldProgrammer

+0

@OldProgrammer Извините, если у вас есть проблемы с форматированием: SELECT Категория, COUNT (DECODE (Region_Description, 'Region1', 'Region1')) Region1, COUNT (DECODE (Region_Description, 'Region2', 'Region2')) Region2, COUNT (DECODE (Region_Description, 'регионе3', 'регионе3')) регионе3 из категории JOIN Заказы USING (Order_ID_FK) РЕГИСТРИРУЙТЕСЬ государства ИСПОЛЬЗОВАНИЕ (State_ID_FK) РЕГИСТРИРУЙТЕСЬ область используя (Region_ID_FK) GROUP BY GROUPING НАБОРЫ (Категория()) ЗАКАЗАТЬ По категории; Я продолжаю получать нулевые строки ... – johnnyjohnson123

ответ

0
SELECT c.Category, 
     COUNT(CASE r.Region_ID WHEN 1 THEN 1 ELSE NULL END) AS Region1, 
     COUNT(CASE r.Region_ID WHEN 2 THEN 1 ELSE NULL END) AS Region2, 
     COUNT(CASE r.Region_ID WHEN 3 THEN 1 ELSE NULL END) AS Region3, 
     COUNT(CASE r.Region_ID WHEN 4 THEN 1 ELSE NULL END) AS Region4 
FROM REGION r 
     INNER JOIN 
     STATE s 
     ON (r.Region_ID = s.Region_ID_FK) 
     INNER JOIN 
     ORDER o 
     ON (s.State_ID = o.State_ID_FK) 
     INNER JOIN 
     CATEGORY c 
     ON (o.Order_ID = c.Order_ID_FK) 
GROUP BY c.Category 
Смежные вопросы