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

Откуда: СПб
Сообщений: 40
Народ, подскажите плз, есть ли в транзакте вообще такое понятие? Вроде что-то накатал, а не работает. Посмотрите пожалуйста, уже долго сижу, голова не варит

declare @users numeric(4)
declare @b numeric(4)
declare @reg numeric(4)
set @reg = 0
set @users=0
while (@reg < 2)
begin
set @reg = (@reg + 1)
while (@users < 2)
begin
set @users = (@users + 1)
set @b = (select (sum(FK_USERS)/(select id_users from users where(id_users=@users))) from strany where(FK_REGION=@reg and FK_USERS=@users))
if(@b = (select kol_stran from region where(id_region= @reg)))
begin print 'aaa' end
else begin print 'dadasd' end
end
end
11 окт 05, 16:50    [1958909]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Брюлик
Member

Откуда:
Сообщений: 690
Приведи примеры данных и может быть обоидемся без циклов
11 окт 05, 16:53    [1958925]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
Народ, подскажите плз, есть ли в транзакте вообще такое понятие?

А где, вообще, есть такое понятие?
автор
Вроде что-то накатал, а не работает

Не работает или не дает нужный результат?

P.S. Зачем тут цикл вообще?
11 окт 05, 16:54    [1958936]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
DbIX
Member

Откуда: СПб
Сообщений: 40
ID_USERS| users
----------- ----------
1 | user1
2 | user2

ID_REGION | region | kol_stran
----------- ---------- -----------
1 | Evropa | 3
2 | Asia | 1

strany | FK_REGION | FK_USERS
---------- ----------- -----------
Ger | 1 | 1
Fr | 1 | 1
Rus | 1 | 2
Kit | 2 | 2

вот три таблички, один цикл прогоняет по регионам, вложенный по юзерам, ответ должен получиться примерно такой(разумеется после дописания и корректировки):
user1 не владеет регионами
user2 владеет 2-м регионом
11 окт 05, 16:59    [1958965]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Slider_spb
Member

Откуда:
Сообщений: 802
У меня работают вложенные циклы.
11 окт 05, 17:00    [1958971]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Брюлик
Member

Откуда:
Сообщений: 690
Не понял ,почему юсер 1 не владеет? Уверен?
11 окт 05, 17:02    [1958978]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
DbIX
Member

Откуда: СПб
Сообщений: 40
Брюлик
Не понял ,почему юсер 1 не владеет? Уверен?


Если хотя бы 1 страна из всего региона не в "его зоне действия", то он не контролиует регион
11 окт 05, 17:04    [1958993]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Я не понял - у тебя все пользователи магнаты? Владеть азией - это круто :-)))

create table #users (ID_USER int, UNAME varchar(50))
create table #regions (ID_REGION int, RNAME varchar(50))
create table #strany (FK_REGION int, FK_USERS int)

insert #users
select 0, 'user0' union all
select 1, 'user1' union all
select 2, 'user2'

insert #regions
select 1, 'Evropa' union all
select 2, 'Asia'

insert #strany
select 1, 1 union all
select 1, 1 union all
select 1, 2 union all
select 2, 2
go

select UNAME + ' ' + coalesce('владеет регионом '+(select RNAME from #regions where ID_REGION = s.FK_REGION), 'не владеет
регионами')
from #users u
  left join #strany s on u.ID_USER = s.FK_USERS
group by ID_USER, UNAME, FK_REGION
go
drop table #strany
drop table #regions
drop table #users



Posted via ActualForum NNTP Server 1.3

11 окт 05, 17:22    [1959029]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
DbIX
Member

Откуда: СПб
Сообщений: 40
Хехе))) Да нет, это тестовое задание :)
Всем Спасибо Огромное!
Я вери-вери нуб :)
11 окт 05, 17:32    [1959062]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Тогда так:

create table #users (ID_USER int, UNAME varchar(50))
create table #regions (ID_REGION int, RNAME varchar(50))
create table #strany (SNAME varchar(50), FK_REGION int, FK_USERS int)

insert #users
select 1, 'user1' union all
select 2, 'user2'

insert #regions
select 1, 'Evropa' union all
select 2, 'Asia'

insert #strany
select 'Ger', 1, 1 union all
select 'Fr ', 1, 1 union all
select 'Rus', 1, 2 union all
select 'Kit', 2, 2
go

select UNAME + ' ' + coalesce( 'владеет регионом ' + cast(t.ID_REGION as varchar), 'не владеет регионами')
from (select ID_REGION, FK_USERS, max(RNAME) RNAME
      from (select ID_REGION, max(RNAME) RNAME, count(distinct SNAME) cnt
            from #regions r
              inner join #strany s on r.ID_REGION = s.FK_REGION
            group by ID_REGION) t
        right join #strany s on t.ID_REGION = s.FK_REGION
      group by FK_USERS, ID_REGION, cnt
      having count(*) = cnt) t
  right join #regions r on t.ID_REGION = r.ID_REGION and t.FK_USERS = t.FK_USERS
  right join #users u on t.FK_USERS = u.ID_USER
go
drop table #strany
drop table #regions
drop table #users


Posted via ActualForum NNTP Server 1.3

11 окт 05, 17:36    [1959074]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
DbIX
Member

Откуда: СПб
Сообщений: 40
Роман, спасибо тебе большое! Очень помог.
11 окт 05, 17:42    [1959107]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
DbIX
Member

Откуда: СПб
Сообщений: 40
Ааааа, впору книжку по транзакту покупать :) Думал разберусь, а что-то тяжко, вернусь к циклам :)
11 окт 05, 17:50    [1959145]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Книжка конечно не помешает, но лучше потренироваться на www.sql-ex.ru :-))

Posted via ActualForum NNTP Server 1.3

11 окт 05, 20:22    [1959533]     Ответить | Цитировать Сообщить модератору
 Re: Двойные циклы в TRANSACT-SQL  [new]
DbIX
Member

Откуда: СПб
Сообщений: 40
Roman S. Golubin

Книжка конечно не помешает, но лучше потренироваться на www.sql-ex.ru :-))

Posted via ActualForum NNTP Server 1.3


Роман, опять выручил, благодарен я тебе просто немеренно. Как стану гуру в этом деле, обращайся, помогу! )
11 окт 05, 21:06    [1959590]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить