powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый синтаксис
22 сообщений из 22, страница 1 из 1
Хитрый синтаксис
    #32048029
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема такая
В одном select надо подселектом получить какоето значение, что бы потом его успользовать в этом же запросе, но одноверменно отображая и как поле.
Вот как приходится делать сейчас(упрощенный пример):

select (select max(kolvo) from mytable2),price*(select max(kolvo) from mytable2) from mytable

Нельзя ли присвоить первый результат переменной и во втором столбце ее использовать, чтонибудь вроде такого?

select y=(select max(kolvo) from mytable2),price*y from mytable

Или может какимто другим способом это можно упростить.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048041
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:
Код: plaintext
1.
2.
3.
select t1.max_quant ,price*(t1.max_quant) 
from mytable
join (select max(kolvo) as max_quant from mytable2) t1
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048045
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
O-o-o-ops!!
Ошибочка - про "ON" в джойне забыл...
Код: plaintext
1.
2.
3.
select t1.max_quant ,price*(t1.max_quant) 
from mytable
join (select max(kolvo) as max_quant from mytable2) t1 on  1 = 1 
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048058
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
select o.*,(select pers_fullname from pers where pers.pers_id=o.pers_id) as pers_fullname,(select sum(assign.mat_rate_nash*mat_price) from mat_price,tmatoperassignments as assign where mat_price_optmin= 0  and mat_price=(select min(mat_price) from mat_price where mat_id=assign.mat_code and mat_price_optmin= 0 ) and mat_price.mat_id=assign.mat_code and assign.oper_code=o.sproper_id) as mat_sum
,((select sum(assign.mat_rate_nash*mat_price) from mat_price,tmatoperassignments as assign where mat_price_optmin= 0  and  mat_price=(select min(mat_price) from mat_price where mat_id=assign.mat_code and mat_price_optmin= 0 ) and mat_price.mat_id=assign.mat_code and assign.oper_code=o.sproper_id)+sproper_salary_nash)*sproper_productivity as oper_sum
,(select name from edizm where edizm.id=o.sproper_edizm_id) as edizm_name
from tOperations as o,toperationsections as r where r.opersect_id=o.opersect_id and ed_potok_edvpotok in ( 0 , 1 )
where o.sproper_id=o.sproper_id
join (select sum(assign.mat_rate_nash*mat_price) from mat_price,tmatoperassignments as assign where mat_price_optmin= 0  and mat_price=(select min(mat_price) from mat_price where mat_id=assign.mat_code and mat_price_optmin= 0 ) and mat_price.mat_id=assign.mat_code and assign.oper_code=o.sproper_id) tl on  1 = 1 


Server: Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'join'.
Server: Msg 170, Level 15, State 1, Line 5
Line 5: Incorrect syntax near 'tl'.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048059
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтото не так?
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048069
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожааалуйста;-)
У меня такая фигня раздутая сплошь и рядом.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048072
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MPro, ну неужели так трудно разобраться с синтаксисом?
У тебя where стоит перед джоином.

Вариант с переменной должен пройти, попробуй, естественно переменная должна быть объявлена.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048073
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя where стоит перед джоином.

Неважно если where удалить он все равно тоже пишет.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048077
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка раз

from tOperations as o,toperationsections as r

Ошибка два

where o.sproper_id=o.sproper_id join

В суть запроса вникать совсем не хочется, что дикое наворочено да и только. Если тебе отчет нужно сделать сделай его через временные таблицы и не мучайся, во всяком случае часто бывает что отчет на временных таблицах отрабатывает быстрее чем на запросе с подзапросами.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048082
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь с переменной

Код: plaintext
1.
2.
3.
4.
5.
declare @myvar money
select o.*,(select pers_fullname from pers where pers.pers_id=o.pers_id) as pers_fullname,@myvar=(select sum(assign.mat_rate_nash*mat_price) from mat_price,tmatoperassignments as assign where mat_price_optmin= 0  and mat_price=(select min(mat_price) from mat_price where mat_id=assign.mat_code and mat_price_optmin= 0 ) and mat_price.mat_id=assign.mat_code and assign.oper_code=o.sproper_id)
,((select sum(assign.mat_rate_nash*mat_price) from mat_price,tmatoperassignments as assign where mat_price_optmin= 0  and  mat_price=(select min(mat_price) from mat_price where mat_id=assign.mat_code and mat_price_optmin= 0 ) and mat_price.mat_id=assign.mat_code and assign.oper_code=o.sproper_id)+sproper_salary_nash)*sproper_productivity as oper_sum
,(select name from edizm where edizm.id=o.sproper_edizm_id) as edizm_name
from tOperations as o,toperationsections as r where r.opersect_id=o.opersect_id and ed_potok_edvpotok in ( 0 , 1 )


Результат

Server: Msg 141, Level 15, State 1, Line 5
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048086
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не отчет а выборка и далеко не самая геморойноя.
Но в ее содержимое не надо влезать она работает без join я только хочу понять как ее укоротить.


Ошибка раз

from tOperations as o,toperationsections as r

Ошибка два

where o.sproper_id=o.sproper_id join //чтобы было where;-)

не понял ошибок все работает
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048088
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не отчет а выборка и далеко не самая геморойноя.

Ну напиши тогда процедуру.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048090
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз смысл того что я хочу.

Выдается таблица тряляля, кол-во, цена (выдается через подзапрос), сумма=опять таже цена*колво

Вопрос: как сделать так чтобы подзапрос цена писать 1 раз а не 2?
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048098
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я надеюсь что есть более простой способ?
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048103
Елена
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To MPro
Попробуйте по такому принципу:
SELECT f1, 5*f1
FROM (SELECT f1 = <формула> FROM table) alias

То есть все вычисляемые поля создаете в подзапросе, а потом используете их в основном запросе.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048111
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поле должно вычисляться для строчки, насколько я вас понял вы предлагается результат посчитать 1 раз на запрос или я не прав?
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048113
Елена
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To MPro

Да, посчитать 1 раз вычисляемое значение для всех нужных строк в подзапросе, а потом его использовать в качестве операнда в выражениях основного запроса

Может так понятнее:
SELECT f1, f1+6
FROM (SELECT f1 = 5*f FROM table) t
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048116
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря не понял.
Разве вместо from можно какие подзапросы писать?
Если нетрудно опишите подробнее.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048120
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее вместо названия таблицы?
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048148
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно буду дальше громоздить запросы;-(
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048154
Елена
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To MPro

Весто таблицы в FROM можно использовать подзапрос, или derived table.
...
Рейтинг: 0 / 0
Хитрый синтаксис
    #32048184
mpro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Елене

В случае одной таблицы это действительно работает, но как быть если их несколько?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый синтаксис
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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