Как просмотреть Suggsetions, отсортированные в базе данных за последние три месяца? - PullRequest
0 голосов
/ 26 февраля 2012

Я новый разработчик ASP.NET и пытаюсь разработать простую систему ящиков для предложений. У меня есть следующая часть моей базы данных:

Таблица пользователей: имя пользователя, имя, код подразделения ... и т. Д.

Таблица деления: SapCode, Деление

Таблица предложений: идентификатор, заголовок, описание, дата отправки, имя пользователя

(первый атрибут является первичным ключом в каждой таблице, а атрибут (submitDate) имеет тип данных DateTime)

Теперь мне нужно разработать таблицу, в которой показаны предложения за последние три месяца. Я уже разработал запрос, который показывает имя сотрудника, имя пользователя, подразделение, название предложения, описание предложения. Все, что я хочу сейчас - это показать Месяц. Например, чтобы показать предложения за последние три месяца, в столбце «Месяц» должно отображаться: январь-2012, декабрь-2011, ноябрь-2011 Так как это сделать?

Мой текущий запрос SQL:

SELECT     dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.SafetySuggestionsType.Type, dbo.SafetySuggestionsLog.Username, 
                      dbo.employee.Name, dbo.Divisions.DivisionShortcut
FROM         dbo.Divisions INNER JOIN
                      dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode INNER JOIN
                      dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN
                      dbo.SafetySuggestionsType ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID

Требуется вывод:

Имя сотрудника, Имя пользователя, Подразделение, Название предложения, Описание предложения, Месяц предложения (дата представления)

1 Ответ

1 голос
/ 26 февраля 2012

Я переформатировал ваш запрос, чтобы он поместился на странице без прокрутки.

Надеюсь, это обеспечит то, что вам нужно.Он использует DATENAME для получения частей месяца и года от текущей даты и DATEPART для расчета "три месяца назад".Обратите внимание, что DATEPART не ведет себя так, как вы могли бы ожидать - он подсчитывает количество границ конца периода (в данном случае месяцев) - следовательно, условие

...WHERE DATEDIFF(month,SafetySuggestionsLog.submittedDate,getdate()) < 3

, потому что последние три месяца имеют дваконец месяца между ними.

Я также добавил предложение ORDER BY.

SELECT     dbo.SafetySuggestionsLog.Title, 
           dbo.SafetySuggestionsLog.Description, 
           dbo.SafetySuggestionsType.Type, 
           dbo.SafetySuggestionsLog.Username, 
           dbo.employee.Name, 
           dbo.Divisions.DivisionShortcut,
           left(datename(month,SafetySuggestionsLog.submittedDate),3) 
            + '-' 
            + datename(year,SafetySuggestionsLog.submittedDate) AS SubmittedMonth
FROM         dbo.Divisions 
INNER JOIN   dbo.employee 
ON dbo.Divisions.SapCode = dbo.employee.DivisionCode 
INNER JOIN   dbo.SafetySuggestionsLog 
ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username 
INNER JOIN   dbo.SafetySuggestionsType 
ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID
WHERE DATEDIFF(month,SafetySuggestionsLog.submittedDate,getdate()) < 3
ORDER BY SafetySuggestionsLog.submittedDate DESC

Также стоит отметить, что вам не нужно полностью указывать имя всех столбцов в запросе - этодопустимый SQL для псевдонима входных таблиц, например, так:

...INNER JOIN   dbo.SafetySuggestionsLog AS log

Затем вы можете ссылаться на имена столбцов по псевдонимам в запросе - например,

log.Username

вместо

dbo.SafetySuggestionsLog.Username

, что облегчает чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...