powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод данных за Сегодня, Вчера, Позавчера
5 сообщений из 5, страница 1 из 1
Вывод данных за Сегодня, Вчера, Позавчера
    #39924834
Tenya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!

Есть условно такая таблица в базе MS SQL:

Флора - Вид - Дата
Деревья - Березы - 2020-02-10 18:54:00.0000000
Деревья - Ель - 2020-02-10 07:16:00.0000000
Деревья - Ель - 2020-02-10 07:18:00.0000001
Деревья - Ель - 2020-02-10 07:19:00.0000002
Деревья - Сосна - 2020-02-09 14:50:00.0000000
Деревья - Сосна - 2020-02-10 14:00:00.0000001
Деревья - Тополь - 2020-02-08 02:02:00.0000000
Травы - Лопух - 2020-02-10 11:52:00.0000000
Травы - Мята - 2020-02-09 11:32:00.0000000
Цветы - Пионы - 2020-02-10 05:05:00.0000000
Цветы - Пионы - 2020-02-08 06:01:00.0000001
Цветы - Розы - 2020-02-09 11:53:00.0000000
Цветы - Ромашки - 2020-02-08 13:26:00.0000000
Цветы - Герберы - 2020-02-08 11:59:00.0000000
Цветы - Герберы - 2020-02-09 12:59:00.0000001
Цветы - Герберы - 2020-02-08 10:59:00.0000002



Необходимо, что суммарное кол-во по столбцу Вид отображалось за Сегодня, Вчера, Позавчера, т.е. итог такой:

Флора - Вид - Сегодня - Вчера - Позавчера
Деревья - Березы - 1 - 0 - 0
Деревья - Ель - 3 - 0 - 0
Деревья - Сосна - 1 - 1 - 0
Деревья - Тополь - 0 - 0 - 1
Травы - Лопух - 1 - 0 - 0
Травы - Мята - 0 - 1 - 0
Цветы - Пионы - 1 - 0 - 1
Цветы - Розы - 0 - 1 - 0
Цветы - Ромашки - 0 - 0 - 1
Цветы - Герберы - 0 - 1 - 2


Только менять каждый день в запросе даты - не подходит, необходимо, чтобы при выполнении запроса автоматом выводились данные за Сегодня, Вчера, Позавчера.

Подскажите, пожалуйста, как можно сделать?
Различные манипуляции с GETDATE и DATEADD не помогают (или делаю что-то не то) :(

P.S.: прошу тапками не кидаться сразу, только учусь SQL :)
...
Рейтинг: 0 / 0
Вывод данных за Сегодня, Вчера, Позавчера
    #39924839
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenya
Подскажите, пожалуйста, как можно сделать?
Сделать это можно либо операцией PIVOT, либо SUM+CASE.

Вы сделайте скрипт с созданием временной таблицы, и наполнением её тестовыми данными, вам помогут.
...
Рейтинг: 0 / 0
Вывод данных за Сегодня, Вчера, Позавчера
    #39924840
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tenya,

today => CAST(date as date) = CAST(getdate() as date)
yesterday => CAST(date as date) = DATEADD(day,-1,CAST(getdate() as date))
day before yesterday =>CAST(date as date) = DATEADD(day,-2,CAST(getdate() as date))

ну и SUM(CASE WHEN ... THEN 1 ELSE 0)
...
Рейтинг: 0 / 0
Вывод данных за Сегодня, Вчера, Позавчера
    #39924893
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tenya,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
-- Тестовые данные
DECLARE @t AS TABLE
                    ([Флора] VARCHAR(10) NOT NULL
                   , [Вид]   VARCHAR(10) NOT NULL
                   , [Дата]  DATETIME2(7) NOT NULL
                    );
INSERT INTO @t
                    ([Флора] 
                   , [Вид]   
                   , [Дата]  
                    )
SELECT 'Деревья',  'Березы', '20200210 18:54:00.0000000' UNION ALL
SELECT 'Деревья',  'Ель', '20200210 07:16:00.0000000' UNION ALL
SELECT 'Деревья',  'Ель', '20200210 07:18:00.0000001' UNION ALL
SELECT 'Деревья',  'Ель', '20200210 07:19:00.0000002' UNION ALL
SELECT 'Деревья',  'Сосна', '20200209 14:50:00.0000000' UNION ALL
SELECT 'Деревья',  'Сосна', '20200210 14:00:00.0000001' UNION ALL
SELECT 'Деревья',  'Тополь', '20200208 02:02:00.0000000' UNION ALL
SELECT 'Травы', 'Лопух', '20200210 11:52:00.0000000' UNION ALL
SELECT 'Травы', 'Мята', '20200209 11:32:00.0000000' UNION ALL
SELECT 'Цветы', 'Пионы', '20200210 05:05:00.0000000' UNION ALL
SELECT 'Цветы', 'Пионы', '20200208 06:01:00.0000001' UNION ALL
SELECT 'Цветы', 'Розы', '20200209 11:53:00.0000000' UNION ALL
SELECT 'Цветы', 'Герберы', '20200209 12:59:00.0000001' UNION ALL
SELECT 'Цветы', 'Ромашки', '20200208 13:26:00.0000000' UNION ALL
SELECT 'Цветы', 'Герберы', '20200208 11:59:00.0000000' UNION ALL
SELECT 'Цветы', 'Герберы', '20200208 10:59:00.0000002'

-- Решение
SELECT 
       t.[Флора]
     , t.[Вид]
     , COUNT(CASE WHEN CONVERT(DATE,  t.[Дата]) = CONVERT(DATE, GETDATE()) THEN t.[Дата] END) AS [Сегодня]
     , COUNT(CASE WHEN CONVERT(DATE,  t.[Дата]) = DATEADD(DAY, -1, CONVERT(DATE,  GETDATE())) THEN t.[Дата] END) AS [Вчера]
     , COUNT(CASE WHEN CONVERT(DATE,  t.[Дата]) = DATEADD(DAY, -2, CONVERT(DATE,  GETDATE())) THEN t.[Дата] END) AS [Позавчера]
FROM 
     @t AS t
GROUP BY
       t.[Флора]
     , t.[Вид]
ORDER BY
       t.[Флора]
     , t.[Вид]; 	; 



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Флора      Вид        Сегодня     Вчера       Позавчера
---------- ---------- ----------- ----------- -----------
Деревья    Березы     1           0           0
Деревья    Ель        3           0           0
Деревья    Сосна      1           1           0
Деревья    Тополь     0           0           1
Травы      Лопух      1           0           0
Травы      Мята       0           1           0
Цветы      Герберы    0           1           2
Цветы      Пионы      1           0           1
Цветы      Розы       0           1           0
Цветы      Ромашки    0           0           1
...
Рейтинг: 0 / 0
Вывод данных за Сегодня, Вчера, Позавчера
    #39925764
Tenya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint, спасибо огромное!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод данных за Сегодня, Вчера, Позавчера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]