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

Откуда:
Сообщений: 506
Добрый день. Буду крайне признателен, если кто-то поможет хоть чем-нибудь.
Есть задание:
Таблица с машинами
ID MODEL REGNUM
1 ВАЗ-2106 а001аа62
2 КАМАЗ о002оо62

Есть таблица состояния машины на конкретное число: в работе, в ремонте

ID ID_CAR DATE STATUS
1 1 01.01.2014 В работе
1 1 03.01.2014 В работе
1 1 10.01.2014 В работе

Если на конкретную дату на машину нет записи - она считается в простое.

Необходимо за период времени по одной машине (задать период и ID машины в переменных перед запросом) одним оператором SELECT вывести таблицу состояния машины на каждую дату в периоде (работа, ремонт, простой).
Пример:
ВАЗ-2106 01.01.2014 Работа
ВАЗ-2106 02.01.2014 Простой
ВАЗ-2106 03.01.2014 Работа

Я в скуле кроме select from и так далее не делал.Ну иногда еще объединял. Можно ли написать запрос без создания таблиц на скуле?
8 окт 14, 13:14    [16675978]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Glory
Member

Откуда:
Сообщений: 104760
Максим Александровитч
Можно ли написать запрос без создания таблиц на скуле?

А где тогда будет ваши данные храниться, если не в таблицах ?
8 окт 14, 13:16    [16675986]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Максим Александровитч,

with t1 as (...)
8 окт 14, 13:28    [16676091]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Добрый Э - Эх
Guest
Максим Александровитч
Можно ли написать запрос без создания таблиц на скуле?
можно
8 окт 14, 13:28    [16676093]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Glory
Максим Александровитч
Можно ли написать запрос без создания таблиц на скуле?

А где тогда будет ваши данные храниться, если не в таблицах ?

Я просто хочу увидеть,как будет выглядеть запрос на бумаге..
8 окт 14, 13:29    [16676104]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Господа,мне реально нужна помощь..
8 окт 14, 13:37    [16676175]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Максим Александровитч
Я просто хочу увидеть,как будет выглядеть запрос на бумаге..

ДА как как -
Делаете таблицу\сте - календарь
Далее -
select
Машинки.ИД
Календарь.Дата
Состояние = ISNULL(состояние.состояние , Прогул)
from Каленндарь
left join Состояние
inner join Машинки
where поле из календарь в заданном диапазоне

Дето так +- трамвайная остановка
8 окт 14, 13:40    [16676191]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Добрый Э - Эх
Guest
Максим Александровитч
Я просто хочу увидеть,как будет выглядеть запрос на бумаге..
распечатай запрос и посмотрите. в чем проблема-то? или у тебя принтера нет? так напиши запрос, мы тебе его распечатаем, отсканируем и выложим картинку, чтобы ты могу полюбоваться им на бумаге.
8 окт 14, 13:42    [16676202]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Ога,спс,буду ковырять
8 окт 14, 13:43    [16676209]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
o-o
Guest
Максим АлександроWITCH ???

witch-и они такие, руками не набирают, волшебством берут

посвящается Змею:
declare @cars table(ID int, MODEL nvarchar(20), REGNUM varchar(10));
insert into @cars values
(1, N'ВАЗ-2106', 'а001аа62'),
(2, N'КАМАЗ', 'о002оо62') 

declare @st table(
ID int, ID_CAR int, DATE date, STATUS nvarchar(20));
insert into @st values
(1, 1, '20140101', N'В работе'),
(1, 1, '20140103', N'В работе'),
(1, 1, '20140110', N'В работе')

declare @dt1 date = '20140101';
declare @dt2 date = '20140103';
declare @id_car int = 1;

with c as(
select dateadd(day, n-1, @dt1) as dt
from dbo.nums
where dateadd(day, n-1, @dt1) <= @dt2),

tmp as(
select c.dt, @id_car as id_car,ISNULL(s.STATUS, N'Прогул') as st
from c left join @st s on c.dt = s.DATE and s.id_car = @id_car)

select t.dt, c.MODEL, t.st
from tmp t join @cars c on t.id_car = c.ID
order by t.dt
---
dt	MODEL	st
2014-01-01	ВАЗ-2106	В работе
2014-01-02	ВАЗ-2106	Прогул
2014-01-03	ВАЗ-2106	В работе
8 окт 14, 14:10    [16676459]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
o-o
Максим АлександроWITCH ???

witch-и они такие, руками не набирают, волшебством берут

посвящается Змею:
declare @cars table(ID int, MODEL nvarchar(20), REGNUM varchar(10));
insert into @cars values
(1, N'ВАЗ-2106', 'а001аа62'),
(2, N'КАМАЗ', 'о002оо62') 

declare @st table(
ID int, ID_CAR int, DATE date, STATUS nvarchar(20));
insert into @st values
(1, 1, '20140101', N'В работе'),
(1, 1, '20140103', N'В работе'),
(1, 1, '20140110', N'В работе')

declare @dt1 date = '20140101';
declare @dt2 date = '20140103';
declare @id_car int = 1;

with c as(
select dateadd(day, n-1, @dt1) as dt
from dbo.nums
where dateadd(day, n-1, @dt1) <= @dt2),

tmp as(
select c.dt, @id_car as id_car,ISNULL(s.STATUS, N'Прогул') as st
from c left join @st s on c.dt = s.DATE and s.id_car = @id_car)

select t.dt, c.MODEL, t.st
from tmp t join @cars c on t.id_car = c.ID
order by t.dt
---
dt	MODEL	st
2014-01-01	ВАЗ-2106	В работе
2014-01-02	ВАЗ-2106	Прогул
2014-01-03	ВАЗ-2106	В работе


Блин, как быстро...мне бы овладеть подобным. Почему АлександровиТч, ибо я не уникален, в плане отчества. Мхех..осталось создать таблицу по этим значениям..
Спасибо огромное.
8 окт 14, 14:13    [16676486]     Ответить | Цитировать Сообщить модератору
 Re: Вывод состояния  [new]
o-o
Guest
Максим Александровитч,

не забудьте dbo.Nums создать.
или сразу календарь.
пожалуйста.
8 окт 14, 14:16    [16676516]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить