Как суммировать только столбцы с числовыми значениями в новой строке? (Неудачные попытки ROLLUP)

Результаты моего запроса возвращают ряд вещей, имен, заголовков, агрегатов, счетчиков и т. д. Мне нужна только ИТОГОВАЯ СТРОКА внизу для последних четырех столбцов:

AE  Client  Priority    Contract    LineNumber  Zone    Network Days    Time Parameter  Total Spots Required    Cost Per Spot   Required Rev
Doe, John   Dummy Client    2   153370  37  Atlanta AMC     MTWTFSS      19:00 - 00:00       38           1           1           1
Doe, John   Dummy Client    2   153370  40  Atlanta AMC     MTWTFSS      19:00 - 00:00       38           1           2           3
Doe, John   Dummy Client    2   153370  253 Atlanta ESPN    MTWTFSS      19:00 - 00:00       33           5           3           5
Doe, John   Dummy Client    2   153370  256 Atlanta ESPN    MTWTFSS      19:00 - 00:00       33           3           4           7
Doe, John   Dummy Client    2   153370  391 Atlanta GOLF    MTWTFSS      19:00 - 00:00       35           1           5           9
Doe, John   Dummy Client    2   153370  412 Atlanta HALL    MTWTFSS      19:00 - 00:00       42           3           6           11
                                                                                            219           14         21           36

Я продолжаю пытаться использовать ROLLUP() или WITH ROLLUP, но затем он разделяет мои строки. Я предоставляю весь свой вопрос, потому что я не хочу, чтобы что-то маленькое сбивало меня с толку, и я пропустил это, резюмируя это.

Set DATEFIRST 1
SELECT
    AE.LastName+', '+AE.FirstName as 'AE',
    Client.Name as 'Client',
    Eventmaster.PriorityID as 'Priority',
    Conline.ConID as 'Contract',
    Conline.LineNum as 'LineNumber',
    Zone.Name as 'Zone',
    Network.Name as 'Network',
    ((CASE
        WHEN Conline.monday = '1'
            THEN 'M'
            ELSE '-'
    END)+
    (CASE
        WHEN Conline.Tuesday = '1'
            THEN 'T'
            ELSE '-'
    END)+
    (CASE
        WHEN Conline.Wednesday = '1'
            THEN 'W'
            ELSE '-'
    END)+
    (CASE
        WHEN Conline.Thursday = '1'
            THEN 'T'
            ELSE '-'
    END)+
    (CASE
        WHEN Conline.Friday = '1'
            THEN 'F'
            ELSE '-'
    END)+
    (CASE
        WHEN Conline.Saturday = '1'
            THEN 'S'
            ELSE '-'
    END)+
    (CASE
        WHEN Conline.Sunday = '1'
            THEN 'S'
            ELSE '-'
    END)) as 'Days',
    (Left(Convert(Time, DATEADD(ss,Conline.StartTime, 0),0),5))+' - '+(Left(Convert(Time, DATEADD(ss,Conline.StopTime, 0),0),5)) as 'Time Parameter',
    Conline.TotalSpots as 'Total Spots',
    COUNT(EventMaster.Status) as 'Required',
    Conline.Cost as 'Cost Per Spot',
    Conline.Cost * count(eventmaster.status) as 'Required Rev'
FROM EventMaster
    inner join Conline on
    EventMaster.ConlineID = Conline.ConlineID
    inner join Contract on
    Conline.ConID = Contract.ConID
    inner join Zone on
    Conline.ZoneID = Zone.ZoneID
    inner join Network on
    Conline.NetworkID = Network.NetworkID
    inner join AE on
    Contract.AEID = AE.AEID
    inner join Client on
    Contract.ClientID = Client.ClientID

WHERE
    Conline.StartDate >= 19862
    and Conline.StopDate <= 19889
    and EventMaster.Status = 'R'
    and Network.Name NOT IN ('iATT', 'XCSV', 'XCSB','ICOX', 'ISYN', 'ICHT', 'LO3FLO', 'LO3HUNT', 'LO96', 'LOFE', 'INFO', 'IFXN', 'DMAN', 'SMS','VODT','RRR', 'RFI', 'LO', 'NPRD', 'CONT', 'PROD', 'RETL', 'VHXB', 'WEBO', 'INFOMERC','MISC-PKG','WEBB', 'VHXL','AUTO', 'CRWL', 'FEAT', 'LA 46', 'LEASE2', 'LO Knox')
    --and Eventmaster.ClientID <> '7777'
    and EventMaster.PriorityID = '2'
    and totalspots > '0'
    and EventMaster.Deleted <> '1'
GROUP BY
    AE.LastName,
    AE.FirstName,
    Client.Name,
    Eventmaster.PriorityID,
    Conline.ConID,
    Conline.LineNum,
    Zone.Name,
    Network.Name,
    Conline.TotalSpots,
    Conline.Monday,
    Conline.Tuesday,
    Conline.Wednesday,
    Conline.Thursday,
    Conline.Friday,
    Conline.Saturday,
    Conline.Sunday,
    Conline.StartTime,
    Conline.StopTime,
    conline.cost
ORDER BY
    AE.LastName,
    Conline.ConID,
    Zone.Name
SET DATEFIRST 7

Похоже, он мог попытаться дать мне общее количество для каждого Conline.LineNum прямо под каждой строкой, но мне нужно общее количество для всего запроса.


person elcoxita    schedule 21.01.2015    source источник


Ответы (1)


Вы можете сделать это с помощью пункта union. Но объединение применимо только с одним и тем же атрибутом, поэтому вам также необходимо использовать другие пустые значения. Что-то вроде этого: -

SELECT YOUR PREVIOUS QUERY
UNION
SELECT SUM(FIRST_COL), SUM(SECOND_COL), SUM(THIRD_COL), SUM(FOURTH_COL),
       NULL,NULL,NULL,...........

Я не уверен, но я думаю, что этот подход может решить вашу проблему.

person Ankit Bajpai    schedule 21.01.2015
comment
Есть ли способ рассматривать мой первый набор результатов как таблицу, из которой можно извлечь? Как бы я это сделал? (изменить: у меня не может быть агрегата агрегата, поэтому я не был уверен, как еще сделать эту сумму) - person elcoxita; 21.01.2015
comment
Я понял, что во втором SELECT мне не нужно будет включать все определяющие факторы каждой строки, поэтому, удалив ТЕ, я в основном создаю СУММУ без использования СУММ. Надеюсь, это имеет смысл. По какой-то причине я не получаю правильную СУММУ своих TotalSpots, поэтому я проверяю это. - person elcoxita; 21.01.2015