Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сложные sql запросы незнающий эту тему  [new]
Neznamo
Member

Откуда:
Сообщений: 2
Совершенно не понимаю как написать sql запрос по 4 и 7
(дополнение для 4 задания: в таблице Раунды столбцы [Дата_и_время_начала_раунда] и [Продолжительность_раунда] их нужно как-то суммировать и определить входят ли они во временные рамки, и если время окончания раунда попадает в эти рамки, то строка из таблици Раунды столбца Код_раунда должна попасть в таблицу Итог столбца Код_раунда. Таблици между собой не связаны.

Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) Jun 15 2019 00:26:19 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Home Single Language 10.0 <X64> (Build 17763: )

CREATE TABLE dbo.Раунды(
	Код_раунда int  Primary key IDENTITY(1,1) NOT NULL,
	Локация nvarchar(500) NOT NULL,
	Дата_и_время_начала_раунда datetime NOT NULL,
	Продолжительность_раунда time(7) NOT NULL,
	Координаты_начала_игры_команды nvarchar(10) NULL,
	Количество_команд_в_раунде int NOT NULL,
)


set Identity_Insert Раунды ON
Insert into Раунды
(
Код_раунда,
Локация,
Дата_и_время_начала_раунда,
Продолжительность_раунда,
Координаты_начала_игры_команды,
Количество_команд_в_раунде
)
values
(1,'Лес','11-09-2019 22:10:43','00:10:30','15;0',2),
(2,'Болото','10-09-2019 12:10:43','00:10:30',null,2),
(3,'Горы','10-09-2019 22:10:43','00:10:30','15;0',2),
(4,'Заброшеный склад','10-09-2019 12:10:43','00:20:30',null,4),
(5,'Небеса','15-09-2019 23:10:43','00:20:30','15;0',4),
(6,'Нибиру-800','10-09-2019 12:10:43','00:20:30',null,4),
(7,'Лисьи угодья','14-09-2019 22:10:43','00:30:30','15;0',6),
(8,'Озеро','10-09-2019 12:10:43','22:30:30','15;0',6),
(9,'Виктинбург','10-09-2019 12:10:43','00:30:30',null,6),
(10,'Рунайт','13-09-2019 22:10:43','00:40:30','15;0',8)


BEGIN TRANSACTION;
SELECT  *
Into    Итоги
FROM     dbo.Итоги_раундов
WHERE  (Время_в_раунде > CONVERT(TIME, '00:30:00')) AND (Отключение_во_время_раунда = 1)
COMMIT;


К сообщению приложен файл. Размер - 43Kb


Сообщение было отредактировано: 13 фев 20, 18:41
13 фев 20, 18:32    [22079504]     Ответить | Цитировать Сообщить модератору
 Re: Сложные sql запросы незнающий эту тему  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36639
Выполните пункт 4 и пункт 6.
13 фев 20, 18:33    [22079508]     Ответить | Цитировать Сообщить модератору
 Re: Сложные sql запросы незнающий эту тему  [new]
Neznamo
Member

Откуда:
Сообщений: 2
Neznamo,

CREATE TABLE dbo.Итоги_раундов(
	Код_персонажа int NOT NULL,
	Код_раунда int NOT NULL,
	Код_пользователя int NOT NULL,
	Полученые_очки_опыта int NOT NULL,
	Рейтинг_в_команде int NOT NULL,
	Количество_страйков int NOT NULL,
	Время_в_раунде time(7) NOT NULL,
	Команда_победила bit NOT NULL,
	Отключение_во_время_раунда bit NOT NULL,
	)
ALTER TABLE dbo.Итоги_раундов
ADD CONSTRAINT pk_myConstraint PRIMARY KEY (Код_персонажа,Код_раунда,Код_пользователя)

ALTER TABLE dbo.Итоги_раундов  WITH CHECK ADD FOREIGN KEY(Код_раунда)
REFERENCES dbo.Раунды (Код_раунда)


Insert into Итоги_раундов
(
Код_персонажа,
Код_раунда,
Код_пользователя,
Полученые_очки_опыта,
Рейтинг_в_команде,
Количество_страйков,
Время_в_раунде,
Команда_победила,
Отключение_во_время_раунда
)
values
(1001,1,10001,10,1,0,'00:10:30',1,0),
(1002,1,10002,10,1,0,'00:10:30',1,0),
(1003,1,10003,10,1,0,'00:10:30',0,0),
(1004,2,10004,10,1,1,'00:10:30',1,0),
(1005,2,10005,10,1,0,'00:10:30',1,0),
(1006,2,10006,10,1,5,'00:10:30',0,0),
(1007,3,10007,10,1,0,'00:10:30',1,0),
(1008,3,10008,10,1,3,'00:10:30',0,0),
(1009,8,10009,10,1,0,'00:40:30',1,1),
(10010,8,100010,10,1,0,'00:40:30',1,0),
(10011,10,100011,10,1,6,'00:40:30',0,1),
(10012,10,100012,10,1,0,'00:40:30',1,0)
13 фев 20, 18:47    [22079518]     Ответить | Цитировать Сообщить модератору
 Re: Сложные sql запросы незнающий эту тему  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1150
Neznamo,

+ задания надо решать самостоятельно

4)
with x as (
    select * from [Раунды] r
    where r.[Продолжительность_раунда] > '00:30:00' 
      and exists (select 1 from [Итоги_раундов] rr where rr.[Код_раунда] = r.[Код_раунда] and rr.[отключение_во_время_раунда] > 0)
)
--insert into <кудато>
select x.[Код_раунда], [Дата_и_время_начала_раунда], [Продолжительность_раунда], dateadd(ss, (3600 * datepart(hh, [Продолжительность_раунда]) + 60 * datepart(mi, [Продолжительность_раунда]) + datepart(ss, [Продолжительность_раунда])), [Дата_и_время_начала_раунда])
from x
where cast(dateadd(ss, (3600 * datepart(hh, [Продолжительность_раунда]) + 60 * datepart(mi, [Продолжительность_раунда]) + datepart(ss, [Продолжительность_раунда])), [Дата_и_время_начала_раунда]) as time) between '22:00:00' and '23:30:00'



7)
select [Код_раунда], sum([Количество_страйков]) as [srtikes] from [Итоги_раундов] where [Команда_победила] = 1 group by [Код_раунда]

13 фев 20, 22:13    [22079621]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить