2017-02-17 3 views
1

в настоящее время у меня есть эта таблица:как получить некоторые из значений столбцов в monthwise с использованием даты в месяц

--------------------------------- 
date  | value1 | value2 | 
----------------------------------- 
01-01-2017 | 20 | 10 
02-01-2017 | 30 | 10 
03-01-2017 | 40 | 20 
01-02-2017 | 50 | 5 
02-02-2017 | 10 | 15 
03-02-2017 | 10 | 20 

и мне нужен этот вывод:

Date  | Value1| Value2| 
------------------------- 
Jan-2017 | 90 | 40 
Feb-2017 | 70 | 40 

Может кто-нибудь пожалуйста, предоставить мне соответствующий запрос ?

+0

Можете ли вы предоставить нам, что вы пробовали до сих пор? –

+0

выберите CAST (Date as MONTH), SUM (Value1) как «Sum1» из группы sample1 по CAST (Date as MONTH) –

ответ

0

будет в порядке с 2008 года

WITH CTE AS (
      SELECT 
      SUBSTRING(CAST(DATENAME(MM, DATE) AS VARCHAR(15)), 1, 3) 
      + '-' + 
      CAST(DATEPART(YY, DATE) AS VARCHAR(4)) AS Date, DATEPART(MM, Date) AS MonthOrder, 
      Value1 , 
      Value2 
      FROM tblTestTableDates 
      ) 

SELECT Date, SUM(Value1) AS Value1 , SUM(Value2) AS Value2 
    FROM CTE 
    GROUP BY Date , MonthOrder 
    ORDER BY MonthOrder 

КТР выглядит чище, другой подход, без него

SELECT CONVERT(VARCHAR(3), DATENAME(MM, DATE)) + '-' + 
CAST(DATEPART(YY, DATE) AS VARCHAR(4)), 
SUM(Value1) AS Value1, 
SUM(Value2) AS Value2 
FROM tblTestTableDates 
GROUP BY CONVERT(VARCHAR(3), DATENAME(MM, DATE)) + '-' + CAST(DATEPART(YY,DATE) AS VARCHAR(4)), DATEPART(MM, DATE) 
ORDER BY DATEPART(MM, DATE) 
+0

работает нормально. Спасибо !! и есть ли возможность заказывать месяцы каландровыми мудрами, такими как jan, feb, march..etc., –

+0

Привет, я внесла поправки в оба запроса, чтобы включить порядок по месяцам. Я надеюсь, что это помогает. –

+0

Спасибо! Работает :) –

0

Вы хотите сгруппировать по дате Year-Month и получить сумму value1 и value2. Это достигается за счет:

SELECT CONVERT(VARCHAR(7), DATE, 20) DATE 
    ,SUM(value1) Value1 
    ,SUM(value2) Value2 
FROM myTable 
GROUP BY CONVERT(VARCHAR(7), DATE, 20) 

, если вы хотите, чтобы отобразить имя месяца вместо номера, попробуйте это:

SELECT FORMAT(date,'MMM yyyy') DATE 
    ,SUM(value1) Value1 
    ,SUM(value2) Value2 
FROM myTable 
GROUP BY FORMAT(date,'MMM yyyy') 
+0

его рабочий тон, но мне нужно указать название месяца вместо месячного заказа –

+0

Iam Использование SqlSever 2008..when i Выполнение запроса Это показывает ошибку, как это. Msg 195, уровень 15, состояние 10, строка 1 «FORMAT» не является признанным встроенным именем функции. –

+0

Да, моя ошибка, FORMAT не поддерживается на SQL Server 2008 – apomene

0

выберите DATE_FORMAT (дата, '% b-% Y') в качестве даты, value1, value2 from (выберите месяц (дата), сумма (значение1) значение1, сумма (значение2) значение2, год (дата), дата теста группа по месяцу (дате), году (дате)) aa

+0

Когда я выполняю это .... Msg 195, Level 15, State 10, Line 1 'DATE_FORMAT' не является признанным встроенным именем функции. –

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