2015-12-24 8 views
0

У меня есть столбцы Date, Country и Dollars. Я успешна, если я запрашиваю нравится эта картина ...Сумма запроса по SQL Server по дате и сумме

If Im Trying use union

Мой запрос:

select date, country, sum(car), sum(dollar) 
group by date, country 
union 
select '' as All_Date, '' as All_Country, sum(car), sum(dollar) 
group by All_Date, All_Country 

Но я хочу привести, как это ...

enter image description here

Я смутился, как я могу получить полностью автомобиль и доллары ...

По дате, как на моем снимке (у моих желтых рядов).

Вы можете мне помочь?

Спасибо ваше внимание ..

+1

Спасибо @marc_s – SimanisJKT48

+0

на скриншоте результирующего набора, вы упомянули «Итого» под Date, «все» под Страна и т.д. Вы хотите вернуть «точный» sam e (включая этот текст) из самого SQL Server? –

ответ

0

Предполагая, что вы хотите, «точно» такой же формат (есть текст «Total» в пределах поля даты и т.д.), возвращаемый из SQL Server, вы можете использовать ниже набор запросов запросов (имя таблицы предполагается здесь Tablex):

--STEP 1: Defined a temp table with the grouped data 
SELECT --Grouping based on date 
    DATE 
    ,SUM(CAR) SUM_CAR 
    ,SUM(DOLLARS) SUM_DOLLARS 
INTO 
    #TEMP_GROUPED_DATA 
FROM 
    TABLEX 
GROUP BY 
    DATE 



-- STEP 2: Define a temp table with the grouped data and original data 
SELECT 
    DATE 
    ,COUNTRY 
    ,CAR 
    ,DOLLARS 
INTO #GROUPED_DATA2 
FROM 
    TABLEX 
UNION ALL 
SELECT 
    DATE 
    ,'z ALL' --For formatting have added the 'z', which will be removed in the final query 
    ,SUM_CAR 
    ,SUM_DOLLARS 
FROM #TEMP_GROUPED_DATA 

--STEP 3: Join the temp table with the main table to return in the required format by using Rank, make some tweaks in renaming column values for sorting out in the exact order 
    SELECT 
     CASE 
      WHEN COUNTRY LIKE 'Z %' AND DATE IS NOT NULL THEN 'Total' ELSE CASE WHEN DATE IS NULL THEN 'All Date' ELSE 
      CONVERT(VARCHAR(255),DATE) END END DATE 
     ,CASE WHEN COUNTRY LIKE 'Z %' THEN 'ALL' ELSE COUNTRY END COUNTRY 
     ,CAR 
     ,DOLLARS 
    FROM 
     (SELECT 
     RANK() over (ORDER BY DATE,COUNTRY) ROWNO, * FROM #GROUPED_DATA2 UNION ALL 
    SELECT 
     999999 ROWNO 
     ,NULL as DATE 
     ,'ALL' AS COUNTRY 
     ,sum(car) 
     ,SUM(DOLLARS) 
    FROM 
     TABLEX)T 
    ORDER BY ROWNO 

--Drop temp tables 

drop table #GROUPED_DATA2 
drop table #TEMP_GROUPED_DATA 

Скриншот здесь: Based on the above queries

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