Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / update агрегатными значениями / 10 сообщений из 10, страница 1 из 1
27.03.2009, 16:47
    #35897053
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
select @@version
Adaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007

Дрозофила:
Код: plaintext
1.
2.
3.
4.
5.
create table #tmpTable
(
    Id int not null,
    Cnt int null
)
1.
Код: plaintext
1.
2.
3.
4.
5.
6.
insert into #tmpTable
(Id)
select distinct
   Dep as Id
from
   Staff
2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
update
   #tmpTable
set
   Cnt=count(S.ID)
from
   #tmpTable T
   join Staff S on (S.Dep=T.Id)
group by S.Dep
На 2 ругается

Incorrect syntax near the keyword 'group'

Без group by, ессесно, update'ится левыми значениями. Возможен ли такой update вообще априори?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 16:49
    #35897057
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
Ex_Soft пишет:

> Без group by, ессесно, update'ится левыми значениями. Возможен ли такой
> update вообще априори?

Надо - напиши через подзапросы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 16:58
    #35897090
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
MasterZiv
через подзапросы

Код: plaintext
1.
2.
3.
4.
5.
6.
update
   #tmpTable
set
   Cnt=(select count(ID) from Staff where (Dep=T.Id))
from
   #tmpTable T
Так?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 18:08
    #35897269
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
Ex_Soft пишет:
> Автор: "Ex_Soft"
>
> MasterZiv
>
> через подзапросы
>
>
> update
> #tmpTable
> set
> Cnt=(select count(ID) from Staff where (Dep=T.Id))
> from
> #tmpTable T
>
> Так?

update
#tmpTable
set
Cnt= (select count(S.ID) from Staff S where S.Dep=T.Id)

Да, так.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 18:29
    #35897305
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
Все намного проще:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
update
   #tmpTable
set
   Cnt=count(S.ID)
from
     Staff S 
where (S.Dep=T.Id)
...
Рейтинг: 0 / 0
27.03.2009, 19:13
    #35897370
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
update
    #tmpTable
set
    Cnt=count(S.ID)
from
      Staff S
where (S.Dep=T.Id)

The column prefix 'T' does not matchwith a table name or alias name used in the query

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
update
    #tmpTable T
set
    Cnt=count(S.ID)
from
      Staff S
where (S.Dep=T.Id)

Incorrect syntax near 'T'

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
update
    #tmpTable
set
    Cnt=count(S.ID)
from
      Staff S
where (S.Dep=Id)

Ambiguous column name Id

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 19:22
    #35897384
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
update
    #tmpTable
set
    Cnt=count(S.ID)
from
      Staff S
where (S.Dep=#tmpTable.Id)
ASE TSQL действительно не умеет делать алиасы для обновляемых таблиц. Глупая ASE...
...
Рейтинг: 0 / 0
27.03.2009, 19:26
    #35897389
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
White Owl пишет:
> Автор: "White Owl"
>
> update
> #tmpTable
> set
> Cnt=count(S.ID)
> from
> Staff S
> where (S.Dep=#tmpTable.Id)
>
> ASE TSQL действительно не умеет делать алиасы для обновляемых таблиц.
> Глупая ASE...

А еще можете попробовать

update
#tmpTable
set
MyUnknownTable.Cnt=count(S.ID)
from
Staff S
where (S.Dep=#tmpTable.Id)

:-)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 19:48
    #35897413
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
update
     #tmpTable
set
     Cnt=count(S.ID)
from
       Staff S
where (S.Dep=#tmpTable.Id)
отработало, но выдало количество всех записей
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2009, 21:12
    #35897487
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update агрегатными значениями
эээ... кажется я действительно соврал, прошу прощения. Там действительно вложенный селект требуется.
Код: plaintext
update #tmpTable set Cnt= (select count(S.ID) from Staff S where S.Dep=#tmpTable.Id)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / update агрегатными значениями / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]