Я не могу найти ни одного вопроса/ответа, который мог бы помочь мне приблизиться к моей цели. У меня есть следующая таблица check code on SQL Fiddle.Как я могу группировать строки и столбцы?
SITENAME RTYPE SEASON CTRSTAT CTRTYPE UNITS STARTDATE WKTYPE INVSTAT
site1 T2B P null null 92 null FRSA_P Unsold
site1 T2B Pre null null 36 null FRSA_P Unsold
site1 T2B PRI null null 173 null FRSA_P Unsold
site1 T2B SPE null null 56 null FRSA_P Unsold
site1 T2B P Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T2B Pre Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T2B PRI Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T2B P Complete FRSA 1 2013-03-05 FRSA_P Sold
site1 T2B P Complete FRSA 3 2014-01-01 FRSA_P Sold
site1 T2B Pre Complete FRSA 4 2014-01-01 FRSA_P Sold
site1 T3B P null null 69 null FRSA_P Unsold
site1 T3B Pre null null 26 null FRSA_P Unsold
site1 T3B PRI null null 125 null FRSA_P Unsold
site1 T3B SPE null null 40 null FRSA_P Unsold
site1 T3B Pre Complete FRSA 2 2013-01-01 FRSA_P Sold
site1 T3B P Complete FRSA 1 2014-01-01 FRSA_P Sold
site1 T3B Pre Complete FRSA 2 2014-01-01 FRSA_P Sold
Затем каким-то образом дойдите до отчета, подобного тому, который изображен на следующем рисунке. Если InvStatus не продан, отчет должен вернуть Unsold, в противном случае CTRSTAT.
Пожалуйста, не обратить внимание на итоги и итога, изображение из Excel с помощью других данных. Только для того, чтобы иметь образец нужного результата.
EDIT: В финиках столбцов соответствуют полному году, так, например, одна с 2013-03-05
принадлежит к 01/01/2013
колонку. В случае нулевой даты они будут отображаться в прошлом году в этом случае 01/01/2014
, но могут быть 2015 o любой период, который был последним.
Я пробовал несколько разных подходов, используя GROUP BY
вместе с GROUPING
и SETS
различных типов, но никто не работал. CUBE
и ROLLUP
не полезны или, по крайней мере, мне не удалось получить правильный результат. Может быть, просто невозможно, по крайней мере, не налегке.
Вот пример одного из многих запросов, которые я пробовал, пытаясь перекрутить его, чтобы получить что-то вроде отчета, но все равно ничего близкого.
SELECT
sitename, rtype, season, ctrstat, ctrtype, SUM(units)
,startdate, invstat
FROM tt
GROUP BY
GROUPING SETS ((sitename,InvStat,ctrstat)
,(RType,ctrtype,season,startdate)
,()
)
EDIT: Может должно быть лучше, используя SSRS для решения этой задачи?
Интересная проблема. Это непросто, но это возможно. Прежде чем вы начнете группировку, вам сначала нужно сделать поворот, чтобы извлечь нужные столбцы. Если я получу свободное время в ближайшие несколько часов, я постараюсь дать вам несколько запросов, но не могу обещать. –
Несколько вопросов: как ваш исходный перевод переводится на какие данные столбцов? 2013 или 2014? Специально для непроданных, где это NULL? Куда проходит 2013-03-05? Можете ли вы представить ожидаемые результаты на основе этих точных данных, которые вы опубликовали? –
Спасибо @NenadZivkovic, проверьте новое редактирование. В какой-то момент я подумал о повороте, но я даже не знал, как подойти к этой проблеме. – Yaroslav