Как разделить результаты на отдельные строки в зависимости от года? - PullRequest
0 голосов
/ 09 января 2019

У меня есть запрос, который просматривает прибыль и операционные расходы различных магазинов на основе финансового года, и в настоящее время финансовые годы и переменные сортируются в отдельные столбцы, такие как:

FiscalYear    Metric    Store    Amount
2017          Profit    A        220
2017          Cost      A        180
2018          Profit    B        200 
2018          Cost      B        300
...

Мне нужно сопоставить строки, чтобы по каждому магазину я мог сравнить прибыль за 2017 год с прибылью 2018 года, а стоимость 2017 года - со стоимостью 2018 года.

Я разбил прибыль и затраты, создавая операторы CASE WHEN для ProfitLossTable, но я не знаю, как заставить его создать столбцы «Прибыль за 2017 год» и «Прибыль за 2018 год» соответственно для каждого Магазина.

WITH [Profits, Cost] AS 
(
SELECT ID, StoreID, Number, FYYearID,
CASE WHEN ID = 333 then Number END AS Profit
CASE WHEN ID = 555 then Number END AS Cost
FROM ProfitLossTable
),
Location AS
(
Select StoreID, StoreName
FROM StoreTable
),
FiscalMonth AS
(
SELECT FYYearID, FYYear
FROM FiscalMonthTable
)
SELECT A.Profit, A.Cost
FROM [Profits, Cost] A
JOIN Location B
ON A.StoreID = B.StoreID
JOIN FiscalMonth C
ON A.FYYearID = C.FYYearID

Код выше показывает это, и я чувствую, что близок к созданию столбцов на основе года, но я не знаю, что делать дальше.

FiscalYear    Store    Profit    Cost
2017          A        220       100
2017          A        180       100
2018          B        200       100 
2018          B        300       100

1 Ответ

0 голосов
/ 09 января 2019

В качестве рабочего (на моем компьютере в любом случае ;-p) примера использования ваших данных:

create table #temp(
FiscalYear int not null,
Metric nvarchar(50) not null,
Store nvarchar(10) not null,
Amount int not null
)

insert into #temp
values
(2017, N'Profit', N'A', 220),
(2017, N'Cost', N'A', 180),
(2018, N'Profit', N'B', 200),
(2018, N'Cost', N'B', 300)

select * from #temp

select Metric,
[2017] as [2017],
[2018] as [2018]
from (select FiscalYear, Amount, Metric from #temp) base_data
PIVOT
(SUM(Amount) FOR FiscalYear in ([2017], [2018])
) as pvt
order by pvt.Metric

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