Sql Server: вычисляйте данные по каждому месяцу, году и группе - PullRequest
0 голосов
/ 22 декабря 2011

Прежде всего, моя структура таблицы выглядит примерно так:

CREATE TABLE Testing(
       [ID]        NVARCHAR(50),
       [DATE]      DATETIME,
       [TOTAL]     INT,
       [ITEM]      NVARCHAR(50),
       [Warehouse] NVARCHAR(50)
)ON[PRIMARY]

Я положил образец здесь:

[ID] [Date]      [Total] [Item] [Warehouse]
1    2011-04-04  400     A0001   B12
2    2011-05-04  500     A0001   B13
3    2011-04-30  400     A0001   B12
4    2011-04-25  400     A0001   B13
5    2011-06-05  600     A0001   B12
6    2011-03-02  300     A0001   B11
7    2011-05-28  500     A0001   B13   

Я также пытаюсь сгруппировать по [Item] и [Warehouse] и [Date] по месяцам Например, вывод:

Результат должен быть таким

[Date]        [Total]   [Item]  [Warehouse]
March 2011     300       A0001   B11
April 2011     800       A0001   B12
June 2011      500       A0001   B12
April 2011     400       A0001   B13
May 2011       1000      A0001   B13

Я пробовал что-то вроде sql, что я разбираю по месяцам и годам, чтобы сделать выбор

SELECT [Item],[Warehouse],SUM(Total) AS Total
FROM [Testing]
WHERE Datepart(month,[Date]) = 4 AND DATEPART(year,[Date]) = 2011
GROUP BY [Item],[Warehouse]

Я получил ожидаемый результат? Есть ли способ сделать? я на самом деле пытаюсь составить близкий баланс для каждого месяца и года в зависимости от склада и товара?

Покажите мне, что нужно перебрать таблицу префиксов. Это в любом случае, чтобы сделать это?

Спасибо

С уважением Liangck

Ответы [ 2 ]

3 голосов
/ 22 декабря 2011

Посмотрите на следующие функции

DATENAME (Transact-SQL) и DATEPART

Посмотрите на приведенный ниже пример

DECLARE @Table TABLE(
        DateValue DATETIME
)

INSERT INTO @Table SELECT '01 Jan 2011'
INSERT INTO @Table SELECT '01 Feb 2011'
INSERT INTO @Table SELECT '01 Feb 2011'

SELECT  DATENAME(month,DateValue) + ' ' + CAST(DATEPART(year,DateValue) AS VARCHAR(4)),
        COUNT(1) TotalCnt
FROM    @Table
GROUP BY DATENAME(month,DateValue) + ' ' + CAST(DATEPART(year,DateValue) AS VARCHAR(4))

Результаты:

February 2011   2
January 2011    1
1 голос
/ 22 декабря 2011

Я думаю, что форматирование даты на стороне SQL Server - это (как правило) идея, но все равно вы можете попробовать:

select datename(mm, dateadd(m, datediff(m, 0, [date]), 0)) + ' ' +
      select cast(datepart(yy, dateadd(m, datediff(m, 0, [date]), 0)) as varchar)
      [date] sum(total) as total, item,warehouse
from testing
group by item, warehouse, dateadd(m, datediff(m, 0, [date]), 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...