SQL Значение подсчета в зависимости от дня недели - PullRequest
0 голосов
/ 17 февраля 2020

Вот как выглядит моя таблица

ID | Date
------------
13  2013-03-21 00:00:00
13  2013-03-23 00:00:00
13  2013-03-24 00:00:00
25  2013-03-21 00:00:00
25  2013-03-22 00:00:00
25  2013-03-21 00:00:00
25  2013-03-23 00:00:00
25  2013-03-28 00:00:00
25  2013-03-21 00:00:00
82  2013-03-22 00:00:00
82  2013-03-22 00:00:00
I want it to output (combine sat & sun into 'weekend'). It'll combine all the Mondays, Tuesdays, Wednesdays, etc. and combine the values.

day | total
--------------
Friday  2
Thursday 3
Weekend 3

Это мой запрос до сих пор

SELECT
  CASE
    WHEN DATENAME(weekday, [date]) = 'Saturday' OR DATENAME(weekday, [date]) = 'Sunday' THEN 'Weekend'
    ELSE DATENAME(weekday, [date])
  END AS Day,
  COUNT(DISTINCT [id]) AS score

  FROM [table]

GROUP BY
  CASE
    WHEN DATENAME(weekday, [date]) = 'Saturday' OR DATENAME(weekday, [date]) = 'Sunday' THEN 'Weekend'
    ELSE DATENAME(weekday, [date])
  END

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

Day | total
--------------
Friday 2
Thursday 2
Weekend 2

Ответы [ 3 ]

0 голосов
/ 17 февраля 2020

Похоже, что то, что вы на самом деле после, представляет собой отдельное количество идентификатора и даты вместе взятых. Похоже, что наиболее простым способом было бы объединить 2 значения для создания нового уникального значения и COUNT этих DISTINCT значений:

SELECT CASE WHEN DATENAME(WEEKDAY, V.[Date]) IN ('Saturday','Sunday') THEN 'Weekend' ELSE DATENAME(WEEKDAY, V.[Date]) END AS [Weekday],
       COUNT(DISTINCT CONCAT(ID,[date]))
FROM (VALUES (13, CONVERT(datetime2(0),'2013-03-21T00:00:00')),
             (13, CONVERT(datetime2(0),'2013-03-23T00:00:00')),
             (13, CONVERT(datetime2(0),'2013-03-24T00:00:00')),
             (25, CONVERT(datetime2(0),'2013-03-21T00:00:00')),
             (25, CONVERT(datetime2(0),'2013-03-22T00:00:00')),
             (25, CONVERT(datetime2(0),'2013-03-21T00:00:00')),
             (25, CONVERT(datetime2(0),'2013-03-23T00:00:00')),
             (25, CONVERT(datetime2(0),'2013-03-28T00:00:00')),
             (25, CONVERT(datetime2(0),'2013-03-21T00:00:00')),
             (82, CONVERT(datetime2(0),'2013-03-22T00:00:00')),
             (82, CONVERT(datetime2(0),'2013-03-22T00:00:00'))) V (ID, [Date])
GROUP BY CASE WHEN DATENAME(WEEKDAY, V.[Date]) IN ('Saturday','Sunday') THEN 'Weekend' ELSE DATENAME(WEEKDAY, V.[Date]) END;
0 голосов
/ 17 февраля 2020

Попробуйте!

 select count(id)as Total,Day from
 (
 select id, case when Datename(weekday,dt1) IN('Saturday','Sunday') then 'Weekend' else Datename(weekday,dt1) end as 'Day' from tab
 )x

 group by Day

Демонстрация здесь

0 голосов
/ 17 февраля 2020
select Day,Count(day) cnt from (
 SELECT
  CASE
    WHEN DATENAME(weekday, [date]) = 'Saturday' OR DATENAME(weekday, [date]) = 'Sunday' THEN 'Weekend'
    ELSE DATENAME(weekday, [date])
  END AS Day
  ,[date]

   FROM [Infinite_campus].[dbo].[AttendanceRecord]
  ) as t
  group by Day
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...