Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос с циклом 
V
    Опции темы
TaNK
Дата 10.2.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Код

select pw.power_id from [power] pw inner join payer p on p.pay_id = pw.pay_id
where p.dog_num = 1

возвращает следующее
2463
2464
2784
2785
2829
2830
а вот следующий запрос который должен отработать...для ранее полученных данных..но пока я не могу придумать как это доделать
Код

declare @kol  tinyint,
        @temp tinyint,
        @pw_id int;
set @kol  = 0;
set @temp = 1;

while (@temp) <= 64
BEGIN
if (select (convert(integer, wg3_daysweek_stat ) & @temp) 
from power_year
where power_id = 2464) = @temp

SET @kol = @kol + 1;
SET @temp = @temp * 2;
END

select @kol as ss

не могу придумать как where power_id = 2464 по очередно подставлять данные из 1 запроса и запоминать это?
по поводу сохранения данных думаю во временную таблицу а вот как подставлять поочередно не пойму, кто нить поможет?

MSSQL 2000


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Deniel_li
Дата 10.2.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 6.12.2007

Репутация: 1
Всего: 1



при помощи курсора... 

чтото типа 

Код

declare @power

DECLARE abc CURSOR LOCAL FOR select pw.power_id from [power] pw inner join payer p on p.pay_id = pw.pay_id
where p.dog_num = 1

OPEN abc
FETCH NEXT FROM abc INTO @power

WHILE @@FETCH_STATUS=0
BEGIN
    
-- здесь что-то выполняем

-- переход к следующему клиенту--
    FETCH NEXT FROM abc INTO @power
END

CLOSE abc
DEALLOCATE abc




PM MAIL   Вверх
TaNK
Дата 10.2.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



попробывал....и почему то выдает только данные для первого power_id = 2463

вот как сделал
Код

declare @power int
declare @kol  tinyint,
        @temp tinyint,
        @pw_id int;
set @kol  = 0;
set @temp = 1;

DECLARE abc CURSOR LOCAL FOR select pw.power_id from [power] pw inner join payer p on p.pay_id = pw.pay_id
where p.dog_num = 1

OPEN abc
FETCH NEXT FROM abc INTO @power

WHILE @@FETCH_STATUS=0
BEGIN
    
-- здесь что-то выполняем


while (@temp) <= 64
BEGIN
if (select (convert(integer, wg3_daysweek_stat ) & @temp) 
from power_year
where power_id = 2464) = @temp

SET @kol = @kol + 1;
SET @temp = @temp * 2;
END

select @kol as ss


-- переход к следующему клиенту--
    FETCH NEXT FROM abc INTO @power
END

CLOSE abc
DEALLOCATE abc


может где то в коде надо обнулять значения 
@kol  
@temp


Это сообщение отредактировал(а) TaNK - 10.2.2009, 15:30


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Zioma
Дата 10.2.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Так наверное необходимо использовать переменную @power вместо 2464:
Код

while (@temp) <= 64
BEGIN
if (select (convert(integer, wg3_daysweek_stat ) & @temp) 
from power_year
where power_id = @power) = @temp
SET @kol = @kol + 1;
SET @temp = @temp * 2;
END

PM MAIL   Вверх
TaNK
Дата 12.2.2009, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



всем спасибо за помощь..решил написанием функции
Код

CREATE FUNCTION fn_decimal_binary (@power_id int) -- номер ГО
returns int

as
BEGIN
-------------Подсчет-кол-ва-рабочих дней-ГО------------------------
declare @a int, @kol tinyint;
set @a = (select (convert(integer, wg3_daysweek_stat)) 
          from power_year
          where power_id = @power_id
          )
set @kol = 0
declare @binary varchar(8000)
set @binary=''
while @a > 0
begin
set @binary = cast((@a & 1)as varchar(10)) + @binary
if (@a % 2) = 1
set @kol = @kol + 1
set @a = @a / 2
end

     RETURN @kol
---------------------------------------------------------------------- 
End

и вызов ее в самом запросе...
Код

ned_days = (select dbo.fn_decimal_binary ((select power_id from power where power_id = pw.power_id)))





--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.