Преобразование даты и времени в дату в формате mm-dd-yyyy для использования с предложением Между в SQL - PullRequest
0 голосов
/ 18 сентября 2018

table output

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

Final_output

Я написал следующий код:

SELECT  GROUP_NAME,CONVERT(date,creation_date,103),
SUM(case when Status='status 1' then 1 else 0 end) AS 'status 1',
SUM(case when Status='status 2' then 1 else 0 end) AS 'status 2',
SUM(case when Status='status 3' then 1 else 0 end) AS 'status 3',
SUM(case when Status='status 4' then 1 else 0 end) AS 'status 4',
SUM(case when Status='status 5' then 1 else 0 end) AS 'status 5',
COUNT(ticketnumber) AS GRAND_TOTAL 

FROM tablename WHERE CONVERT(date,creation_date,103) BETWEEN @from AND @to
GROUP BY GROUP_NAME,CONVERT(date,creation_date,103)    

Я создаю представление, которое будет сопоставлено с инструментом iservice.@from и @to предоставят пользователю возможность выбрать даты.

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

Например, если в необработанных данных есть 4 заявки для группы А., но в выводе отображается 3 заявки.

Нужна помощь для исправления кода или любой простой способ написания вышеуказанного кода.

Я использую SQL 2012

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете просто сделать это, удалив свою группу с помощью Creation_date - Когда вы группируете это, вы берете все даты, которые отличаются друг от друга.

Примечание: предложение where было толькотоже покажу как можно это выразить.Я также исправил код, удалив ) после convert(date)

declare @table table (groupName nvarchar(50),create_date datetime,statusname nvarchar(50),ticket_number nvarchar(50))

insert into @table
Values

('Group A','2018-09-15','Status 1','A1'),
('Group B','2018-09-05','Status 3','A2'),
('Group C','2018-08-26','Status 5','A6'),
('Group C','2018-09-01','Status 4','A8'),
('Group B','2018-08-22','Status 2','A10'),
('Group C','2018-08-12','Status 3','A11'),
('Group A','2018-08-18','Status 5','A17'),
('Group B','2018-08-04','Status 5','A19'),
('Group C','2018-08-10','Status 4','A21'),
('Group A','2018-07-31','Status 2','A25'),
('Group B','2018-08-02','Status 1','A28'),
('Group C','2018-07-27','Status 3','A34'),
('Group A','2018-07-17','Status 2','A39'),
('Group B','2018-07-23','Status 4','A46'),
('Group C','2018-07-09','Status 2','A50'),
('Group C','2018-07-15','Status 3','A62'),
('Group B','2018-07-15','Status 5','A71'),
('Group C','2018-07-07','Status 5','A72'),
('Group A','2018-06-27','Status 4','B1'),
('Group A','2018-07-03','Status 2','B6')


SELECT
  GROUPNAME,
  sum(case when Statusname='status 1' then 1 else 0 end) as 'status 1',
  sum(case when Statusname='status 2' then 1 else 0 end) as 'status 2',
  sum(case when Statusname='status 3' then 1 else 0 end) as 'status 3',
  sum(case when Statusname='status 4' then 1 else 0 end) as 'status 4',
  sum(case when Statusname='status 5' then 1 else 0 end) as 'status 5',
  count(ticket_number) as GRAND_TOTAL 
FROM @table 
WHERE convert(date,create_date,103) between '2018-07-07' and '2018-08-01'
GROUP BY GROUPNAME
...