SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Microsoft SQL Server » Период (Создать период от заданной даты)
Период [сообщение #3521] Wed, 25 October 2023 11:32 Переход к следующему сообщению
krioxi в настоящее время не в онлайне  krioxi
Сообщений: 16
Зарегистрирован: October 2023
Junior Member
Добрый день!
В БД прописаны дни(даты) к которым привязаны услуги за определенный период, но есть даты у которых нет услуг ,и их соответственно нет в БД
как прописать период чтобы отображались все даты от заданной (переменная) Confused  
Re: Период [сообщение #3522 является ответом на сообщение #3521] Wed, 25 October 2023 11:36 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 887
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
ЯНХНП

покажи таблицы и пример данных.
а то непонятно.
Re: Период [сообщение #3523 является ответом на сообщение #3522] Wed, 25 October 2023 12:01 Переход к предыдущему сообщениюПереход к следующему сообщению
krioxi в настоящее время не в онлайне  krioxi
Сообщений: 16
Зарегистрирован: October 2023
Junior Member
select
CONVERT(VARCHAR(5), ServDate, 08) AS ServDate,
Quantity,
Additional,
Visit.OpenDate as OpenDate,
Visit.CloseDate as CloseDate,
EmployeeSet.Name as Name11,
    Price

FROM
ServedSet
INNER JOIN
( SELECT
Name,
CONVERT (date, OpenDate) as OpenDate,
CONVERT (date, CloseDate) as CloseDate,
VisitsSet.Id AS VisitID,
Birth,
Clients_Category as Category

FROM
VisitsSet

JOIN ClientsSet
ON Visits_Clients = ClientsSet.Id
) AS Visit
ON ServedSet.Served_Visits = Visit.VisitID

INNER JOIN
ServicesSet
ON Served_Services = ServicesSet.Id

INNER JOIN
EmployeeSet
ON Served_Employee = EmployeeSet.Id


WHERE
IsServed in (0,1)
AND
OpenDate = @Zaezd AND
Visit.Name = (@Client)
AND
Type !='СБ'
Пример:             
@Zaezd-заезд 27.08.2023 (длится 14 дней)
@Client-фио клиента
28.08,29.08,31.08,5.09,7.09 массаж
нужно чтобы отображались все дни с27.08 по  10.09
Re: Период [сообщение #3527 является ответом на сообщение #3523] Wed, 25 October 2023 13:23 Переход к предыдущему сообщениюПереход к следующему сообщению
krioxi в настоящее время не в онлайне  krioxi
Сообщений: 16
Зарегистрирован: October 2023
Junior Member
не понятно?
Re: Период [сообщение #3528 является ответом на сообщение #3527] Wed, 25 October 2023 17:27 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 360
Зарегистрирован: June 2022
Senior Member
Если SQL Server хотя бы 2016, то можно сделать хранимку какая будет принимать на вход дату и число дней и возвращать табличную переменную, а с ней уже джойниться.
Для старого просто временную таблицу. В ней по тому же принципу делать вставку дат и работать уже с ней дальше.
Re: Период [сообщение #3578 является ответом на сообщение #3528] Mon, 30 October 2023 07:58 Переход к предыдущему сообщениюПереход к следующему сообщению
krioxi в настоящее время не в онлайне  krioxi
Сообщений: 16
Зарегистрирован: October 2023
Junior Member
у меня не получается
прошу вашей помощи
Re: Период [сообщение #3593 является ответом на сообщение #3578] Wed, 01 November 2023 10:58 Переход к предыдущему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 360
Зарегистрирован: June 2022
Senior Member
Что не получается? Вывести даты в запросе на несколько дней вперед от переданной?

Как-то так:
use testdb
Go

IF OBJECT_ID(N'tempdb..#Accounts') IS NOT NULL  
   DROP TABLE #Accounts;  
 
CREATE TABLE #Accounts ( CreatedAt DATE, Balance MONEY)
 
DECLARE @rate FLOAT, @period INT, @sum MONEY, @date DATE
SET @date = GETDATE()
SET @rate = 0.065;
SET @period = 10;
SET @sum = 10000;
 
WHILE @period > 0
    BEGIN
        INSERT INTO #Accounts VALUES(@date, @sum)
        SET @period = @period - 1
        SET @date = DATEADD(day, 1, @date)
        SET @sum = @sum + @sum * @rate
    END;
 
SELECT * FROM #Accounts
Предыдущая тема: Парсинг XML
Следующая тема: Как скопировать записи таблицы, если таблица битая?
Переход к форуму:
  


Текущее время: Thu Nov 21 20:35:42 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01098 секунд