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

Откуда:
Сообщений: 356
select * from
(select SS.PRESS press,SUM(isnull(QUANT_FACT,0)),PRESS,'Ïðåññ ¹'+PRESS, '' as CODEFORM
-- ,@BDATE AS bdate,@EDATE AS edate, @ORGNAME as ORGNAME, @FlagColor as FlagColor
from V_SMENTASKSPECS SS(nolock) ,SMENTASK S (nolock)
where
S.VCODe=SS.PCODE
and DATETASK>='20140101'
and DATETASK<=getdate()
and isnull(PRESS,'')<>''
and isnull(QUANT_FACT,0)<>0
group by PRESS)a
right join
(select vihod.zavod_numb zavod_numb,vihod.timeost,isnull(vvod.peredano,'') from
V_aktvihod vihod (nolock) left join V_aktvvoda vvod (nolock)
on vihod.vcode=vvod.vcode_ABC)b
on a.press=b.zavod_numb

возникает ошибка, почему?
28 мар 14, 06:50    [15798536]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
    (select SS.PRESS press,SUM(isnull(QUANT_FACT,0)),PRESS,'&#207;&#240;&#229;&#241;&#241; &#185;'+PRESS, '' as CODEFORM
--            ,@BDATE AS bdate,@EDATE AS edate, @ORGNAME as ORGNAME, @FlagColor as FlagColor
            from V_SMENTASKSPECS SS(nolock) ,SMENTASK S (nolock)
            where
            S.VCODe=SS.PCODE
            and DATETASK>='20140101'
            and DATETASK<=getdate()
            and isnull(PRESS,'')<>''
            and isnull(QUANT_FACT,0)<>0
            group by PRESS)a
    right join
    (select vihod.zavod_numb zavod_numb,vihod.timeost,isnull(vvod.peredano,'') from
            V_aktvihod vihod (nolock) left join V_aktvvoda vvod (nolock)
            on vihod.vcode=vvod.vcode_ABC)b
    on a.press=b.zavod_numb


возникает ошибка, почему?
28 мар 14, 06:51    [15798537]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
забавная смесь соединений таблиц через запятую и ANSI-JOIN-ами...
Для начала переписал бы все в едином стиле. Ну и текст ошибки не помешал бы...
28 мар 14, 06:59    [15798542]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
R-Magistr,

как вариант причины ошибок - отсутствие алиасов вычисляемых колонок в подзапросах...
28 мар 14, 07:00    [15798544]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Добрый Э - Эх
забавная смесь соединений таблиц через запятую и ANSI-JOIN-ами...
Для начала переписал бы все в едином стиле. Ну и текст ошибки не помешал бы...


Вот текст ошибки
Msg 8155, Level 16, State 2, Line 1
No column was specified for column 2 of 'a'.
Msg 8155, Level 16, State 2, Line 1
No column was specified for column 4 of 'a'.
Msg 8156, Level 16, State 1, Line 1
The column 'PRESS' was specified multiple times for 'a'.
Msg 8155, Level 16, State 2, Line 1
No column was specified for column 3 of 'b'.
28 мар 14, 07:07    [15798547]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Добрый Э - Эх
забавная смесь соединений таблиц через запятую и ANSI-JOIN-ами...
Для начала переписал бы все в едином стиле. Ну и текст ошибки не помешал бы...


а как правильно делать? я новичёк, понимаю что через Опу соединяю, но не могу сообразить как надо-то.... не доходит голова
28 мар 14, 07:08    [15798549]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Другими словами - Я тупой, помогите мне )
28 мар 14, 07:10    [15798551]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Их вот можно как-то сджоинить без этого большого идиотского right join, но я не догоню как (((
28 мар 14, 07:14    [15798554]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
Для начала, чтобы избавиться от ошибки, нужно присвоить алиасы выделенным фрагментам кода:
select * from
    (select SS.PRESS press, SUM(isnull(QUANT_FACT,0)) , PRESS, '&#207;&#240;&#229;&#241;&#241; &#185;'+PRESS , '' as CODEFORM
--            ,@BDATE AS bdate,@EDATE AS edate, @ORGNAME as ORGNAME, @FlagColor as FlagColor
            from V_SMENTASKSPECS SS(nolock) ,SMENTASK S (nolock)
            where
            S.VCODe=SS.PCODE
            and DATETASK>='20140101'
            and DATETASK<=getdate()
            and isnull(PRESS,'')<>''
            and isnull(QUANT_FACT,0)<>0
            group by PRESS)a
    right join
    (select vihod.zavod_numb zavod_numb,vihod.timeost, isnull(vvod.peredano,'') from
            V_aktvihod vihod (nolock) left join V_aktvvoda vvod (nolock)
            on vihod.vcode=vvod.vcode_ABC)b
    on a.press=b.zavod_numb

ну а соединения через запятые заменить на ... [INNER] JOIN ... ON ...
28 мар 14, 07:17    [15798561]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
R-Magistr
Их вот можно как-то сджоинить без этого большого идиотского right join, но я не догоню как (((
если ты, зная решаемую задачу, структуру используемых таблиц и конечную цель, не догоняешь, то мы, ничего не знающие про твою задачу - тем более ничего догнать не можем.
28 мар 14, 07:19    [15798564]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
Для начала, чтобы избавиться от ошибки, нужно присвоить алиасы выделенным фрагментам кода:
select * from
    (select SS.PRESS press, SUM(isnull(QUANT_FACT,0)) , PRESS, '&#207;&#240;&#229;&#241;&#241; &#185;'+PRESS , '' as CODEFORM
--            ,@BDATE AS bdate,@EDATE AS edate, @ORGNAME as ORGNAME, @FlagColor as FlagColor
            from V_SMENTASKSPECS SS(nolock) ,SMENTASK S (nolock)
            where
            S.VCODe=SS.PCODE
            and DATETASK>='20140101'
            and DATETASK<=getdate()
            and isnull(PRESS,'')<>''
            and isnull(QUANT_FACT,0)<>0
            group by PRESS)a
    right join
    (select vihod.zavod_numb zavod_numb,vihod.timeost, isnull(vvod.peredano,'') from
            V_aktvihod vihod (nolock) left join V_aktvvoda vvod (nolock)
            on vihod.vcode=vvod.vcode_ABC)b
    on a.press=b.zavod_numb

+ выкинуть дубликаты полей (PRESS дважды упомянут), либо каждому из вхождению присвоить свою уникальное имя (PRESS1, PRESS2)...
28 мар 14, 07:27    [15798578]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Добрый Э - Эх,

это понятно, как от right join избавится-то?
28 мар 14, 08:03    [15798613]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
R-Magistr
Добрый Э - Эх,

это понятно, как от right join избавится-то?
заменить на LEFT JOIN, предварительно переставив наборы данных местами
28 мар 14, 08:15    [15798639]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
а если серьезно, то Рекомендации по оформлению сообщений в форуме , особое внимание обратить на пункт №6
28 мар 14, 08:17    [15798644]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Добрый Э - Эх,

понял, постараюсь описать ситуацию тогда подробнее
28 мар 14, 08:26    [15798662]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
R-Magistr
Добрый Э - Эх
забавная смесь соединений таблиц через запятую и ANSI-JOIN-ами...
Для начала переписал бы все в едином стиле. Ну и текст ошибки не помешал бы...


Вот текст ошибки

в качестве подсказки
простой случай, можно без алиасов - работает
select 1


но зато, чуть сложнее - уже не работает
select * from
(
select 1
) as a


а, так - снова работает
select * from
(
select 1 as 'col1'
) as a
28 мар 14, 10:10    [15798986]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
StarikNavy
R-Magistr
пропущено...


Вот текст ошибки

в качестве подсказки
простой случай, можно без алиасов - работает
select 1


но зато, чуть сложнее - уже не работает
select * from
(
select 1
) as a


а, так - снова работает
select * from
(
select 1 as 'col1'
) as a


Круто, я не знал, спасибо )))))
28 мар 14, 11:53    [15799746]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Добрый Э - Эх,

вот решение, подмогли ребята, надо было заджоинить ещё и по датам
select ss.press as press,s.datetask as date, vihod.timeost
		,sum((isnull(QUANT_FACT,0))) as summ, --'Пресс в работе' 
		um.name as prichina
		from v_SMENTASK S (nolock) 
		left join V_SMENTASKSPECS ss (nolock) on s.vcode=ss.pcode
		left join oborud ob(nolock) on ob.zavod_numb=ss.press
		left join V_aktvihod vihod (nolock) on ob.zavod_numb=vihod.zavod_numb 
		     and convert(varchar(10),vihod.timeost,104) = convert(varchar(10),s.datetask,104) --and 1=0
	    left join V_aktvvoda vvod (nolock) on vihod.vcode=vvod.vcode_ABC -- and 1=0
	    left join umcdocs um(nolock) on um.tdoc = isnull(vihod.tdoc,s.tdoc)
		where isnull(ss.press,'')<>''
		and ob.typeobor=129818
		and isnull(s.datetask,'')<>''
		group by ss.press,s.datetask,vihod.timeost,um.name
		order by s.datetask desc


нормально?
28 мар 14, 11:55    [15799752]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
нормально?

left join tabl1 ... where tabl1.f1 = ... является inner join-ом


left join umcdocs um(nolock) on um.tdoc = isnull(vihod.tdoc,s.tdoc) - это что за извращения ?
28 мар 14, 12:01    [15799784]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
R-Magistr
Member

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

а можете пальцем показать где там дуае ощшт, который на inner join можно поменять?

а про то извращение, там проверка на null, и типо если null, то подсовывать ему другое значение
28 мар 14, 12:48    [15800151]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Glory
Member

Откуда:
Сообщений: 104760
R-Magistr
а можете пальцем показать где там дуае ощшт, который на inner join можно поменять?

За вас придумать, какой результат соединения вам нужен ?

R-Magistr
а про то извращение, там проверка на null, и типо если null, то подсовывать ему другое значение

Где "там" ? Вы пытаетесь сделать соединения на основе полей из разных таблиц
28 мар 14, 12:53    [15800186]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
Добрый Э - Эх
Guest
R-Magistr,

и ещё раз:
Добрый Э - Эх
Рекомендации по оформлению сообщений в форуме , особое внимание обратить на пункт №6


Ибо пока вообще непонятно что за задачу ты пытаешься решить...
28 мар 14, 12:56    [15800204]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
R-Magistr
Glory,
там проверка на null, и типо если null, то подсовывать ему другое значение

товарищ Glory , КМК, в курсе как работает оператор isnull
сообщение было о том, его использование, в данном случае, неправильно
28 мар 14, 13:16    [15800382]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
bormental
Member

Откуда:
Сообщений: 90
Glory
Вы пытаетесь сделать соединения на основе полей из разных таблиц


позволю поинтересоваться. Это как не то гуд юзать конструкции ...join table on table.field=isnull(table1.field,table2.field)
или Вы о частном конкретном случае по теме ? Просто как то использовал такой подход - конструкция вполне выглядит лаконичной и работающей
28 мар 14, 13:24    [15800476]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на join  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
bormental
Glory
Вы пытаетесь сделать соединения на основе полей из разных таблиц


позволю поинтересоваться. Это как не то гуд юзать конструкции ...join table on table.field=isnull(table1.field,table2.field)
или Вы о частном конкретном случае по теме ? Просто как то использовал такой подход - конструкция вполне выглядит лаконичной и работающей
И индексы по table1.field и table2.field используются?
28 мар 14, 13:49    [15800645]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить