2014-09-17 4 views
0

Я пытаюсь извлечь данные из таблицы, которая содержит процентное значение на основе двух разных значений - nbr записей, затронутых/всего nbr записей. Мне нужна скользящая ежемесячная сумма. У меня есть запрос, который кажется на правильном пути, но есть очевидный недостаток, поэтому я надеюсь получить некоторую помощь.выражения в запросе с использованием команды PIVOT

Вот запрос:

SELECT 
    Area_NM, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mar, 
    [4] AS Apr, 
    [5] AS May, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Oct, 
    [11] AS Nov, 
    [12] AS Dec 
FROM 
(select Area_NM, month(Closed_DT) as TMonth, (100. * 

    (
     select COUNT(*) from T_AREA AS DISP 
     WHERE P.Area_NM = DISP.Area_NM AND DISP.Branch_MKT = 'NORTHEAST' AND DISP.About <> 'Branch' AND DISP.CAP_TXT IS NOT NULL 
    ) 
    / 
    (
     select sum(count(*)) over() from T_AREA AS TOT 
     WHERE P.Area_NM = TOT.Area_NM AND TOT.Branch_MKT = 'NORTHEAST' AND TOT.About <> 'Branch' 
    )) as perc 
    from T_AREA AS P 
    WHERE P.Branch_MKT = 'NORTHEAST' AND P.About <> 'Branch' 

    ) source  
PIVOT 
( 
SUM(perc) **OBVIOUS ERROR 
    FOR TMonth 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
    ) AS pvtMonth 

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

 
Area Name | Jan | Feb | Mar | Apr | ...... 
____________________________________________ 
Arlington 44% 0% 0% 0%...... 

(где Арлингтон был 9 из TOT и 4 из ИЗОБ в JAN, 0 в DISP для остаток месяцев)
Фактические результаты - это цифры, а не точные проценты.

Ошибка, указанная в команде PIVOT. Поскольку я уже запускал выражение, мне технически не нужен SUM, мне просто нужно значение выражения. Верный?

EDIT: Добавление некоторых образцов данных:

CREATE TABLE [T_AREA](
[Case_NBR] [varchar](18) NULL, 
[About] [varchar](15) NULL, 
[CAP_TXT] [varchar](50) NULL, 
[Complaint_TYP] [varchar](11) NULL, 
[Branch_MKT] [varchar](9) NULL, 
[Branch_DIV] [varchar](30) NULL, 
[Area_NM] [varchar](30) NULL, 
[Branch_NM] [varchar](30) NULL, 
[Closed_DT] [datetime] NULL 

) ON [PRIMARY] 

GO 


INSERT INTO [T_AREA] 
[Case_NBR],[About],[CAP_TXT],[UPDT_DT],[Complaint_TYP],[Branch_MKT],[Branch_DIV], [Area_NM],[Branch_NM],[Closed_DT]) 
VALUES 
('05/21/2014-1577309','Branch Teammate',NULL,'Operational','NORTHEAST','Gr Washington and Maryland','DC N Arlington GWM Area','1275 K STREET','5/23/2014 11:44:34 AM'), 
('05/21/2014-1577382','Branch Teammate','No Action','Service','NORTHEAST','North and South Carolina','Hickory Salisbury NCSC Area','STATESVILLE BOULEVARD','5/27/14 3:05 PM'), 
('05/21/2014-1577949','Branch Teammate',NULL,'Operational','NORTHEAST','Total Virginia','Richmond E Henrico VA Area','TENTH AND MAIN','5/21/14 6:41 PM'), 
('05/22/2014-1578740','Branch Teammate','No Action','Service','NORTHEAST','Gr Washington and Maryland','Baltimore Harford GWM Area','WATERVIEW TOWN CENTER','5/22/14 8:58 AM'), 
('05/22/2014-1579248','Branch Teammate','No Action','Operational','NORTHEAST','North and South Carolina','Winston Salem NCSC Area','MEDICAL PARK','4/27/14 9:03 AM'), 
('05/22/2014-1579250','Branch Teammate','No Action','Service','NORTHEAST','Total Tennessee','Nashville Rutherford TN Area','MURFREESBORO ROAD','4/22/14 5:04 PM'), 
('05/22/2014-1579578','Branch Teammate','No Action','Operational','NORTHEAST','Gr Washington and Maryland','Alexandria S Arling GWM Area','LANDMARK','5/22/14 6:11 PM'), 
('05/22/2014-1579605','Branch Teammate',NULL,'Operational','NORTHEAST','Gr Washington and Maryland','Baltimore Harford GWM Area','NORTH CHARLES','5/27/14 10:36 AM'), 
('05/22/2014-1579609','Branch Teammate',NULL,'Operational','NORTHEAST','Gr Washington and Maryland','North PG GWM Area','BLADENSBURG','6/3/14 9:25 PM'), 
('05/23/2014-1580473','Branch Teammate','No Action','Operational','NORTHEAST','Gr Washington and Maryland','Fairfax Prince Wm GWM Area','MONTCLAIR','6/29/14 5:12 PM'), 
('05/23/2014-1580518','Branch Teammate',NULL,'Service','NORTHEAST','Gr Washington and Maryland','S Montgomery GWM Area','OLNEY','6/23/14 10:42 AM'), 
('05/23/2014-1580667','Branch Teammate','No Action','Operational','NORTHEAST','North and South Carolina','Greater S Charlotte NCSC Area','HILLTOP-MONROE','5/29/14 10:09 AM'), 
('05/23/2014-1580687','Branch Teammate',NULL,'Operational','NORTHEAST','Gr Washington and Maryland','North PG GWM Area','ARDWICK-ARDMORE','3/23/14 12:18 PM'), 
('05/23/2014-1580784','Branch Teammate',NULL,'Operational','NORTHEAST','North and South Carolina','Hickory Salisbury NCSC Area','STATESVILLE BOULEVARD','6/28/14 3:28 PM'), 
('05/23/2014-1581167','Branch Teammate','No Action','Operational','NORTHEAST','Total Tennessee','Memphis TN Area','POPLAR & HIGHLAND','5/29/14 10:38 AM'); 
+3

вы помечено это как с MySQL и SQL Server, какую базу данных вы используете? У MySQL нет PIVOT, так что это будет проблемой. Если вы запустите подзапрос (исключая опорные элементы) - это работает? – Taryn

+0

Это SQL Server 2008. Да, этот подзапрос работает, исключая опорную точку. – user2432887

+0

Какова ошибка, которую вы получаете с запросом? – Taryn

ответ

0

После долгих съемок неприятности я понял ошибку, это было несколько. Я приведу список ниже: 1. Нужно DISTINCT в основном запросе 2. Добавлен дополнительный фильтр для основного запроса, который привел результаты до уровня 3. Отсутствие сравнения в подзапросе назад к столбцу месяца

Вот окончательный запрос:

SELECT 
    Area_NM, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mar, 
    [4] AS Apr, 
    [5] AS May, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Oct, 
    [11] AS Nov, 
    [12] AS Dec 
FROM 
(select DISTINCT Area_NM, month(Closed_DT) as TMonth, (100 * 

    (
     select COUNT(*) from T_AREA AS DISP 
     WHERE P.Area_NM = DISP.Area_NM AND month(P.Closed_DT) = month(DISP.Closed_DT) AND DISP.Branch_MKT = 'NORTHEAST' AND DISP.About <> 'Branch' AND DISP.CAP_TXT IS NOT NULL 
    ) 
    / 
    ( 
     select sum(count(*)) over() from T_AREA AS TOT 
     WHERE P.Area_NM = TOT.Area_NM AND month(P.Closed_DT) = month(TOT.Closed_DT) AND TOT.Branch_MKT = 'NORTHEAST' AND TOT.About <> 'Branch' 
     ) 

    ) as perc 
    from T_AREA AS P 
    WHERE P.Branch_MKT = 'NORTHEAST' AND P.About <> 'Branch' AND P.CAP_TXT IS NOT NULL 

    ) source 
PIVOT 
(
    SUM(perc) 
    FOR TMonth 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvtMonth 
Смежные вопросы