Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: трансформация таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
Konst_One
так у вас в таком случае RIGHT OUTER JOIN
Всё правильно, нужен лефт джойн, и по сменам связка есть.
8 дек 14, 15:24    [16966803]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
alexeyvg
Konst_One
так у вас в таком случае RIGHT OUTER JOIN
Всё правильно, нужен лефт джойн, и по сменам связка есть.


возможно и так, но из объяснений ТС что-то уж запутанно всё
8 дек 14, 15:27    [16966813]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
alexeyvg
Проставьте алиасы у таблиц, и алиасы для всех полей, которые используете. Иначе все будут путаться, включая сервер!
Например:
SELECT c.*, h.REC_EQUIP_420, h.ELAPSED_HOURS 
FROM dbo.Calendar c
    left join MSF420_HOURS h
        on h.REV_STAT_DATE = c.Date 
        and h.SHIFT = c.Shift
WHERE YEAR(c.Date) = 2014 and MONTH(c.Date)=11
order by c.Date

Ещё, например, не нужно числа в строковых константах представлять. Зачем сервер путать, делать неявные конвертации?
8 дек 14, 15:28    [16966820]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
числа и даты в строковых константах - не моя блажь, это то, что досталось "по наследству". менять не могу, много на этих таблицах завязано, мало ли что потом...

алиасы не помогли. самое смешное, когда делала пример на нескольких строках, джойн сработал как надо
create table T (Date datetime, Shift float)
insert into T values('2014-11-01','1');
insert into T values('2014-11-01','2');
insert into T values('2014-11-01','3');
insert into T values('2014-11-02','1');
insert into T values('2014-11-02','2');
insert into T values('2014-11-02','3');

create table TT (REC_EQUIP_420 char(13),REV_STAT_DATE varchar(8),SHIFT char(2),ELAPSED_HOURS decimal(38,2))
insert into TT values('E000000002421','20141101','1','7');
insert into TT values('E000000002421','20141102','3','5');


select T.Date,T.Shift,TT.REC_EQUIP_420,TT.ELAPSED_HOURS
from T
left join TT on T.Date=TT.REV_STAT_DATE and T.Shift=TT.SHIFT


типы данных этих таблиц и моих совпадают. не понимаю тогда, что за ерунда...
8 дек 14, 16:26    [16967243]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
Shift float

ужас
8 дек 14, 16:30    [16967277]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
в этой базе еще не то можно увидеть............((((((((
8 дек 14, 16:34    [16967301]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
значит смотрите данные по табличкам

можно так ещё попробовать:

SELECT c.Date, c.Shift, h.REC_EQUIP_420, h.ELAPSED_HOURS 
FROM dbo.Calendar c left outer join MSF420_HOURS h
        on CAST(h.REV_STAT_DATE as datetime) = c.Date 
        and CAST(c.SHIFT as int) = CONVERT(int,h.Shift)
WHERE YEAR(c.Date) = 2014 and MONTH(c.Date)=11
order by c.Date
8 дек 14, 16:37    [16967322]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
не помогло.... то же самое
8 дек 14, 16:39    [16967332]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
в общем, понятно теперь, что дело не в скрипте, а в данных. спасибо всем, буду дальше сама разбираться.
8 дек 14, 16:44    [16967359]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
никак не могу победить этот запрос, не работает как надо.....
может кто поможет написать процедуру, которая бы в таблицу добавляла недостающие даты и смены (в диапазоне между date1 и date2) для каждого вида оборудования

create table TT (REC_EQUIP_420 char(13),REV_STAT_DATE varchar(8),SHIFT char(2),ELAPSED_HOURS decimal(38,2))

insert into TT values('E000000002421','20141101','1','7');
insert into TT values('E000000002421','20141102','3','5.5');
insert into TT values('E000000002424','20141101','3','5');
insert into TT values('E000000002424','20141103','1','3.2');
insert into TT values('E000000002424','20141103','2','2.5');

select * from TT

drop table TT
9 дек 14, 16:19    [16973020]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
qsc
которая бы в таблицу добавляла недостающие даты и смены

записи в таблицу добавляются командой insert

qsc
не работает как надо.....

И вы в состоянии привести данные, на которых видно это "не работает" ?
9 дек 14, 16:23    [16973050]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
могу только скриншот, на данных, которые введены для примера на форуме, запрос работает. на реальных данных - нет.
есть таблица с датами и сменами - Calendar, вторая - с наработкой по датам и сменам MSF420_HOURS. А результатирующая таблица вместо трех записей, например, по оборудованию 000000002421 за 20141101 дает не 3 записи,а одну... тут была предложена масса вариантов записей, все равно запрос возвращает одну запись вместо трех.

К сообщению приложен файл. Размер - 58Kb
9 дек 14, 16:47    [16973213]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
что-то подозрительные значения у вас в поле Date в табличке Calendar . У вас там точно тип datetime?
9 дек 14, 16:58    [16973286]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
Да. Там datatime. Просто в запросе сделала convert в varchar, чтобы тип Date в таблице Calendar совпадал с типом REV_STAT_DATE в таблице MSF420_HOURS
9 дек 14, 18:23    [16973778]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
o-o
Guest
а вы нам не так покажите.
в 1 окно 3 запроса на реальных данных типа вот так
(а то мало ли что вы там нам показываете):

К сообщению приложен файл. Размер - 33Kb
9 дек 14, 18:46    [16973860]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
qsc
числа и даты в строковых константах - не моя блажь, это то, что досталось "по наследству". менять не могу, много на этих таблицах завязано, мало ли что потом...
Строковая константа-число в вашем запросе.
YEAR(Date)='2014'
вот то, что в кавычках - это строка. А функция YEAR возвращает число. Зачем сравнивать строку с числом - непонятно.
qsc
могу только скриншот, на данных, которые введены для примера на форуме, запрос работает. на реальных данных - нет.
Я же вам сказал, что делать. 16966797

Вы выполните эти 2 запроса, выложите результат сюда. Сделайте скрипт ваших 2х таблиц, выложите результат сюда.
9 дек 14, 19:33    [16974032]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
qsc
Да. Там datatime. Просто в запросе сделала convert в varchar, чтобы тип Date в таблице Calendar совпадал с типом REV_STAT_DATE в таблице MSF420_HOURS
Ну какой ещё конверт. Типы данных должны быть одинаковые. Вам же об этом писали. Или можно делать конвертацию при джойне, но вы то её не делаете.

qsc
А результатирующая таблица вместо трех записей, например, по оборудованию 000000002421 за 20141101 дает не 3 записи,а одну... тут была предложена масса вариантов записей, все равно запрос возвращает одну запись вместо трех.
Вы этого не можете знать, у вас же ещё и неправильная сортировка. Вы можете предполагать.

Отладка программ - это очень просто, но нужно не предполагать, не обрезать, не додумывать, а всегда смотреть полный результат. Если не помещается, накладывайте ещё условия, например, h.REC_EQUIP_420 = '...'
И сортировку сделайте нормальну., по всем уникальным полям результата, а не по дате.
9 дек 14, 19:39    [16974061]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
qsc
Да. Там datatime. Просто в запросе сделала convert в varchar, чтобы тип Date в таблице Calendar совпадал с типом REV_STAT_DATE в таблице MSF420_HOURS
У вас всё таки какой тип данных в календаре? datatime или Date? А у REV_STAT_DATE в таблице MSF420_HOURS?
9 дек 14, 19:46    [16974085]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
qsc
которые введены для примера на форуме, запрос работает. на реальных данных - нет.

И что вам мешает привести пример этих реальных данных, на которых "нет" ?
9 дек 14, 23:12    [16974679]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
o-o,

К сообщению приложен файл. Размер - 55Kb
10 дек 14, 09:21    [16975456]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

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

К сообщению приложен файл. Размер - 64Kb
10 дек 14, 09:21    [16975461]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
данные в таблицу MSF420_HOURS вносятся из АСУ.
10 дек 14, 09:24    [16975469]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
создала новый календарь с типом данных даты varchar
--create table Calendar_KTG(DATE varchar(8),SHIFT char(2))

--insert into Calendar_KTG(DATE,SHIFT) values('20141101','1')
--insert into Calendar_KTG(DATE,SHIFT) values('20141101','2')
--insert into Calendar_KTG(DATE,SHIFT) values('20141101','3')
--insert into Calendar_KTG(DATE,SHIFT) values('20141102','1')
--insert into Calendar_KTG(DATE,SHIFT) values('20141102','2')
--insert into Calendar_KTG(DATE,SHIFT) values('20141102','3')

select * from Calendar_KTG

select * from MSF420_HOURS where REV_STAT_DATE='20141101' and REC_EQUIP_420='E000000002421'

select t.DATE,t.SHIFT,tt.REC_EQUIP_420,tt.ELAPSED_HOURS
from Calendar_KTG t
left join MSF420_HOURS tt on t.DATE=tt.REV_STAT_DATE and t.SHIFT=tt.SHIFT
where t.DATE='20141101' and tt.REC_EQUIP_420='E000000002421'


результат тот же

К сообщению приложен файл. Размер - 25Kb
10 дек 14, 09:47    [16975590]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
o-o
Guest
qsc,
во блин же, а NULLы кто отфильтповал в левой таблице? свой код с моим сравните в последнем запросе в условии where
10 дек 14, 10:16    [16975758]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
результат вашего запроса был опубликован выше:
qsc
o-o,

в любом случае, там значений null нет
10 дек 14, 10:20    [16975774]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить