Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как правильно присоединить наборы данных / 8 сообщений из 8, страница 1 из 1
15.02.2022, 16:51
    #40134297
cad2206
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
Добрый день.
Получаю список последних 30 дней в формате yyyy-mm-dd dw так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH CTE AS
(
    SELECT convert(date, GETDATE()) sDate
    UNION ALL
    SELECT DATEADD(DAY, -1, sDate)
    FROM CTE
    WHERE sDate > GETDATE() - 29
)
SELECT convert(varchar, sDate) + 
                       CASE DATEPART(WEEKDAY,CAST(sDate as varchar(10)))
		            WHEN 1 THEN ' Пн'
                            WHEN 2 THEN ' Вт'
                            WHEN 3 THEN ' Ср'
                            WHEN 4 THEN ' Чт'
                            WHEN 5 THEN ' Пт'
                            WHEN 6 THEN ' Сб'
                            WHEN 7 THEN ' Вс'
                       END [RunDt]

FROM CTE



И есть запрос SELECT, в результате выполнения которого так же есть поле даты в таком же формате. Но не пойму как этот результат сджойнить с верхним. Подскажите.
...
Рейтинг: 0 / 0
15.02.2022, 16:57
    #40134299
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
cad2206
Добрый день.
Получаю список последних 30 дней в формате yyyy-mm-dd dw так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
WITH CTE AS
(
    SELECT convert(date, GETDATE()) sDate
    UNION ALL
    SELECT DATEADD(DAY, -1, sDate)
    FROM CTE
    WHERE sDate > GETDATE() - 29
)
SELECT convert(varchar, sDate) + 
                       CASE DATEPART(WEEKDAY,CAST(sDate as varchar(10)))
		            WHEN 1 THEN ' Пн'
                            WHEN 2 THEN ' Вт'
                            WHEN 3 THEN ' Ср'
                            WHEN 4 THEN ' Чт'
                            WHEN 5 THEN ' Пт'
                            WHEN 6 THEN ' Сб'
                            WHEN 7 THEN ' Вс'
                       END [RunDt]

, a.*
FROM CTE
inner join (ваш запрос) a сte.sDate= a.sDate 




И есть запрос SELECT, в результате выполнения которого так же есть поле даты в таком же формате. Но не пойму как этот результат сджойнить с верхним. Подскажите.
...
Рейтинг: 0 / 0
15.02.2022, 16:57
    #40134300
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
cad2206

с верхним


Мутно излагаете.
Кто на ком стоял?
...
Рейтинг: 0 / 0
15.02.2022, 17:03
    #40134302
cad2206
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
aleks222,

c верхним = с этим:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH CTE AS
(
    SELECT convert(date, GETDATE()) sDate
    UNION ALL
    SELECT DATEADD(DAY, -1, sDate)
    FROM CTE
    WHERE sDate > GETDATE() - 29
)
SELECT convert(varchar, sDate) + 
                       CASE DATEPART(WEEKDAY,CAST(sDate as varchar(10)))
		            WHEN 1 THEN ' Пн'
                            WHEN 2 THEN ' Вт'
                            WHEN 3 THEN ' Ср'
                            WHEN 4 THEN ' Чт'
                            WHEN 5 THEN ' Пт'
                            WHEN 6 THEN ' Сб'
                            WHEN 7 THEN ' Вс'
                       END [RunDt]

FROM CTE
...
Рейтинг: 0 / 0
15.02.2022, 17:06
    #40134304
cad2206
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
msLex,

в инструкции on сравнивать нужно именно RunDt, а не sDate
...
Рейтинг: 0 / 0
15.02.2022, 18:21
    #40134326
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
cad2206
в инструкции on сравнивать нужно именно RunDt, а не sDate

cad2206
Код: 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.
WITH CTE AS
(
    SELECT convert(date, GETDATE()) sDate
    UNION ALL
    SELECT DATEADD(DAY, -1, sDate)
    FROM CTE
    WHERE sDate > GETDATE() - 29
)
SELECT convert(varchar, sDate) + 
                       CASE DATEPART(WEEKDAY,CAST(sDate as varchar(10)))
		            WHEN 1 THEN ' Пн'
                            WHEN 2 THEN ' Вт'
                            WHEN 3 THEN ' Ср'
                            WHEN 4 THEN ' Чт'
                            WHEN 5 THEN ' Пт'
                            WHEN 6 THEN ' Сб'
                            WHEN 7 THEN ' Вс'
                       END [RunDt]

, a.*
FROM CTE
inner join (ваш запрос) a convert(varchar, sDate) + 
                       CASE DATEPART(WEEKDAY,CAST(sDate as varchar(10))) 
		            WHEN 1 THEN ' Пн' 
                           WHEN 2 THEN ' Вт' 
                            WHEN 3 THEN ' Ср' 
                            WHEN 4 THEN ' Чт' 
                            WHEN 5 THEN ' Пт' 
                            WHEN 6 THEN ' Сб' 
                            WHEN 7 THEN ' Вс' 
                       END = a.sDate  

...
Рейтинг: 0 / 0
15.02.2022, 18:28
    #40134328
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
alexeyvg: "На что только люди не идут, что бы не делать таблицу-календарь :-(" 22433236

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @b  date = getdate()  -- задаем исходную дату
      , @n  int  = 7          -- а здесь количество дней

declare @e  date = dateadd(day, @n-1, @b); -- находим конечную дату

with A as ( -- таблица чисел, полученная, например, так
  select row_number() over (order by 1/0) as num from sys.all_objects
)
, B  as ( -- календарь, полученный, например, так
  select dateadd(day, num, cast('20200101' as date)) as dd,
         datepart(weekday, dateadd(day, num, cast('20200101' as date))) as dw
    from A
) -- select * from B

select *
  from B  b 
 where dd between @b and @e


Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dd		dw
2022-02-15	3
2022-02-16	4
2022-02-17	5
2022-02-18	6
2022-02-19	7
2022-02-20	1
2022-02-21	2

и никакой рекурсии
...
Рейтинг: 0 / 0
16.02.2022, 10:40
    #40134452
cad2206
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно присоединить наборы данных
Разобрался, всем спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как правильно присоединить наборы данных / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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