2013-12-18 4 views
2

Я создал следующую сводку SQL Server 2008, и это дает мне результат желания. Я хочу добавить итоговую колонку в конце поворота, где мне сложно.Столбец Итого в конце SQL-запроса Pivot

Пожалуйста, найти SQL я использую для поворота

Select * from (
    Select Case when (podocstatus = 'CL') then 'Closed PO' 
     when (podocstatus = 'OP') then 'Open PO' 
     when (podocstatus = 'SC') then 'Short Closed PO' 
    end as POStatus, 
    YEAR(podate) as [Year], YEAR(podate) as [poyear] , LEFT (datename(Month,podate),3) as [pomonth] 
    From PO_order_hdr 
    Where podocstatus IN ('SC','CL','OP') 
    ) as POnumber 
PIVOT 
(
    Count(poyear) 
    FOR [pomonth] IN (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) 

)as PVT 

Пожалуйста, помогите.

+0

Ваш желаемый результат теперь показан как postatus, year, jan, feb ..., dec right? Как вы хотите получить результат? – Magesh

+1

'LEFT (дата (месяц, потате), 3)' will * never * генерирует значение 'Sept'. –

+0

Привет, Magesh и Damein_the_unbeliever, @magesh, поскольку вы правы, он показывает POstatus, год, январь, февраль, март .... Dec, я хочу, чтобы итоговый результат после DEC для каждой строки stautus, который будет указан ниже. damein_the_unbeliever - да, я поставил SEPT вместо SEP, это была ошибка типографии, спасибо за внимание. – Saifee

ответ

14

Самым простым решением было бы просто сделать что-то вроде этого:

Select *, 
    Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec AS [Total] 
from 
    ... 

Альтернативное решение для общего случая, будет использовать подзапрос. Переместите свой внутренний запрос в CTE, чтобы сделать работу с ней немного легче:

WITH POnumber (POStatus, [Year], [poyear], [pomonth]) AS 
(
    Select sase when (podocstatus = 'CL') then 'Closed PO' 
     when (podocstatus = 'OP') then 'Open PO' 
     when (podocstatus = 'SC') then 'Short Closed PO' 
    end as POStatus, 
    YEAR(podate) as [Year], YEAR(podate) as [poyear] , LEFT (datename(Month,podate),3) as [pomonth] 
    From PO_order_hdr 
    Where podocstatus IN ('SC','CL','OP') 
) 
select *, 
    -- Subselect that counts the total for the given status and year: 
    (select count([Year]) from POnumber T 
    where T.POStatus = PVT.POStatus and T.poyear = PVT.poyear) as [Total] 
from POnumber 
PIVOT 
(
    Count(poyear) 
    FOR [pomonth] IN (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) 
)as PVT 
+0

Спасибо, Дэн, самое простое решение сделало трюк. Маленькие детали играют огромную роль ... большое спасибо за ваши добрые советы и помощь. На самом деле я новичок в SQL, но самообучаюсь через полезные сайты, такие как stackoverflow и добрые люди, подобные вам. – Saifee

Смежные вопросы