Справка по Transact SQL Query - PullRequest
       0

Справка по Transact SQL Query

0 голосов
/ 17 декабря 2010

Я действительно не очень хорошо разбираюсь с SQL, и я просто хочу написать запрос, который показывает некоторые данные журнала в диаграмме.

У меня есть таблица SQL Server, где я записываю запросы, сделанные к веб-службе.

ID          RequestedFunction       RequestDateTime
1           'Confirm()'             2010-12-15 13:27:01.234
2           'Register()'            2010-12-16 12:27:00.678
3           'Confirm()'             2010-12-16 21:00:05.456

Теперь я хотел бы написать запрос, который возвращает мне количество запросов, сделанных за день, сгруппированных по RequestedFunction;которые возвращают мне такой набор данных.

Day          ConfirmFunctionRequests       RegisterFunctionRequests
15           1                             0
16           1                             1

Возможно ли это?Все, что я мог придумать до сих пор, это что-то вроде

;WITH CTE AS
(
SELECT id, 
    [Day] = CAST(day(requestDateTime) AS INT),
    RequestedFunction
FROM [Log]
WHERE month(RequestDateTime)=12 AND
year(RequestDateTime)=2010
)
SELECT [Day],COUNT(ID) AS [#Requests] FROM CTE GROUP BY [Day]

, которое возвращает количество запросов в день, без различия между различными типами запросов.Как я могу написать запрос, который подсчитывает запросы в двух разных столбцах на основе значения в 'RequestedFunction'?

1 Ответ

2 голосов
/ 17 декабря 2010

Это можно сделать с помощью PIVOT , но быстрое и простое решение будет примерно таким:

DECLARE @Log TABLE(
        ID INT,
        RequestedFunction VARCHAR(50),
        RequestDateTime DATETIME
)
INSERT INTO @Log SELECT 1,'Confirm()','2010-12-15 13:27:01.234' 
INSERT INTO @Log SELECT 2,'Register()','2010-12-16 12:27:00.678'
INSERT INTO @Log SELECT 3,'Confirm()','2010-12-16 21:00:05.456'

SELECT  DATEADD(dd,0, DATEDIFF(dd,0,RequestDateTime)) DayValue,
        SUM(
                CASE
                    WHEN RequestedFunction = 'Confirm()' THEN 1
                    ELSE 0
                END 
            ) ConfirmFunctionRequests,
        SUM(
                CASE
                    WHEN RequestedFunction = 'Register()' THEN 1
                    ELSE 0
                END
            )RegisterFunctionRequests
FROM    @Log
GROUP BY DATEADD(dd,0, DATEDIFF(dd,0,RequestDateTime))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...