SQL Как сводить таблицы 6NF
Как выглядит код SQL для простого поворотного примера с несколькими таблицами в шестой нормальной форме?
Многие люди говорят о том, как легко и быстро вращаться с помощью таблиц 6NF, но найти пример этого очень сложно.
Допустим, у меня есть следующие таблицы:
Table: EntryCost
EntryId
Cost
Table: EntryMonth
EntryId
Month
Table: EntryDim1
EntryId
Dim1
Table: EntryDim2
EntryId
Dim2
Как бы я повернуть это без использования MSSQL PIVOT или эквивалент? Сказав, что я хочу агрегировать стоимость с размерами по сторонам и месяцами по столбцам
1 ответ
Решение
Я думаю, что общий подход будет примерно таким:
select
D1.Dim1, D2.Dim2,
sum(case when M.Month = 1 then C.Cost end) as [1],
sum(case when M.Month = 2 then C.Cost end) as [2],
sum(case when M.Month = 3 then C.Cost end) as [3],
sum(case when M.Month = 4 then C.Cost end) as [4],
sum(case when M.Month = 5 then C.Cost end) as [5],
sum(case when M.Month = 6 then C.Cost end) as [5],
sum(case when M.Month = 7 then C.Cost end) as [7],
sum(case when M.Month = 8 then C.Cost end) as [8],
sum(case when M.Month = 9 then C.Cost end) as [9],
sum(case when M.Month = 10 then C.Cost end) as [10],
sum(case when M.Month = 11 then C.Cost end) as [11],
sum(case when M.Month = 12 then C.Cost end) as [12]
from EntryCost as C
left outer join EntryMonth as M on M.EntryID = C.EntryID
left outer join EntryDim1 as D1 on D1.EntryID = C.EntryID
left outer join EntryDim2 as D2 on D2.EntryID = C.EntryID
group by D1.Dim1, D2.Dim2