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

Откуда:
Сообщений: 5
Здравствуйте!
помогите мне довести до ума данную задачу

основной селект
SELECT      zakaz.uin,  zakaz.num, [b]<сюда надо вставить второй селект>[/b]   FROM            zakaz INNER JOIN
 sellers ON zakaz.uin_sellers = sellers.uin
WHERE        (zakaz.num > 0)
ORDER BY zakaz.num DESC

где zakaz.uin - 'порядковый номер заказа'



второй селект:
select  detail.summa_price * (dbo.disc(glav.discount) / 100) * (dbo.disc([group].discount) / 100) + (glav.correct/(select count(detail.uin) from detail where detail.uin_glav=glav.uin ))
 as s from detail 
   inner join glav on glav.uin=detail.uin_glav
  INNER JOIN customer ON glav.uin_customer = customer.uin 
  INNER JOIN [group] ON customer.uin_group = [group].uin
 where detail.uin_zakaz='порядковый номер заказа'


простым копированием второго селекта и вставление его в первый ничего не получилось
Тогда я сделала процедуру которая выполняет второй селект и в результате у меня получается требуемая сумма,
процедура вызывается
exec [dbo].[summa_received] 'порядковый номер заказа'

ALTER PROCEDURE [dbo].[summa_received]
(@uin varchar(300)
)

AS
BEGIN
declare @a varchar(max);
set @a='declare @t float;
set @t=0;
DECLARE MyCursor CURSOR  FOR SELECT detail.summa_price * (dbo.disc(glav.discount) / 100) * (dbo.disc([group].discount) / 100) + (glav.correct/(select count(detail.uin) from detail where detail.uin_glav=glav.uin ))as s from detail 
  inner join glav on glav.uin=detail.uin_glav
  INNER JOIN customer ON glav.uin_customer = customer.uin 
  INNER JOIN [group] ON customer.uin_group = [group].uin
  where detail.uin_zakaz='''+@uin+'''; OPEN MyCursor; ';
set @a=@a+' DECLARE @tablename sysname; ';
set @a=@a+' FETCH NEXT FROM MyCursor INTO @tablename;';
set @a=@a+' WHILE (@@FETCH_STATUS =0) BEGIN ';  
set @a=@a+' set @t=@t+@tablename; ' 
set @a=@a+' FETCH NEXT FROM MyCursor INTO @tablename;'
set @a=@a+' END;CLOSE MyCursor;DEALLOCATE MyCursor;'
set @a=@a+' select @t;'
print @a;
exec(@a);

return;
end


И опять же я не могу вставить эту процедуру в основной селект

Как же мне решить эту проблему? подскажите
6 янв 12, 14:21    [11864674]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
asalot
Member

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

да еще мне нужна сумма из второго селекта, т.е. типа этого sum(второй селект) и эта сумма должна быть в каждой строчке основного селекта, естественно разная для каждой строчки своя
6 янв 12, 14:24    [11864689]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
qwerty112
Guest
asalot,

https://www.sql.ru/forum/actualthread.aspx?tid=127456 p.6
6 янв 12, 14:26    [11864698]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT      zakaz.uin,  zakaz.num, x.s
  FROM  zakaz 
INNER JOIN sellers ON zakaz.uin_sellers = sellers.uin
INNER JOIN (select  detail.uin_zakaz, detail.summa_price * (dbo.disc(glav.discount) / 100) * (dbo.disc([group].discount) / 100) + (glav.correct/(select count(detail.uin) from detail where detail.uin_glav=glav.uin )) as s 
  from detail 
  inner join glav on glav.uin=detail.uin_glav
  INNER JOIN customer ON glav.uin_customer = customer.uin 
  INNER JOIN [group] ON customer.uin_group = [group].uin
) AS x on x.uin_zakaz = zakaz.uin
WHERE        (zakaz.num > 0)
ORDER BY zakaz.num DESC
6 янв 12, 14:40    [11864760]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
asalot
Member

Откуда:
Сообщений: 5
Glory,
спасибо что соединили таблицы, но мне нужна общая сумма со второго селекта, а сейчас получается что каждый 'порядковый номер заказа' делится на несколько строк, вот если бы сделать одну строку для 'порядкового номера заказа' с общей суммой из второго селекта

вот что получается, а нужна всего одна строчка

26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 322
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 242
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 264
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 327

6 янв 12, 14:50    [11864800]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
Glory
Member

Откуда:
Сообщений: 104751
asalot
вот что получается, а нужна всего одна строчка

Ну так перепишите запросы так, чтобы они выдавали нужное число строк
Я же вам показал способ для "простым копированием второго селекта и вставление его в первый"
6 янв 12, 14:53    [11864806]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
Glory
Member

Откуда:
Сообщений: 104751
asalot
вот что получается, а нужна всего одна строчка

26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 322
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 242
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 264
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 327

И какая же из них ?
6 янв 12, 14:54    [11864809]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
asalot
Member

Откуда:
Сообщений: 5
Glory,
сумма должна быть
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 1155
6 янв 12, 14:58    [11864826]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
Glory
Member

Откуда:
Сообщений: 104751
asalot
сумма должна быть
26B396F3-18CB-43E1-A3E3-6853608C5CCF 69 1155

Ну так что мешает написать суммирование в запросе ?
6 янв 12, 15:02    [11864839]     Ответить | Цитировать Сообщить модератору
 Re: Сложный селект (или как вставить exec в select) или другой вариант  [new]
asalot
Member

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

ой и вправду :) извините совсем шарики за ролики заехали
а ларчик просто открывался
большое большое спасибо
6 янв 12, 15:10    [11864865]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить