Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый синтаксис / 22 сообщений из 22, страница 1 из 1
04.09.2002, 13:07:12
    #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
04.09.2002, 13:43:19
    #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
04.09.2002, 13:47:29
    #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
04.09.2002, 13:58:56
    #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
04.09.2002, 14:00:28
    #32048059
mpro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый синтаксис
Чтото не так?
...
Рейтинг: 0 / 0
04.09.2002, 14:24:33
    #32048069
mpro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый синтаксис
Пожааалуйста;-)
У меня такая фигня раздутая сплошь и рядом.
...
Рейтинг: 0 / 0
04.09.2002, 14:28:56
    #32048072
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый синтаксис
MPro, ну неужели так трудно разобраться с синтаксисом?
У тебя where стоит перед джоином.

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

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

from tOperations as o,toperationsections as r

Ошибка два

where o.sproper_id=o.sproper_id join

В суть запроса вникать совсем не хочется, что дикое наворочено да и только. Если тебе отчет нужно сделать сделай его через временные таблицы и не мучайся, во всяком случае часто бывает что отчет на временных таблицах отрабатывает быстрее чем на запросе с подзапросами.
...
Рейтинг: 0 / 0
04.09.2002, 14:42:00
    #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
04.09.2002, 14:45:04
    #32048086
mpro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый синтаксис
Это не отчет а выборка и далеко не самая геморойноя.
Но в ее содержимое не надо влезать она работает без join я только хочу понять как ее укоротить.


Ошибка раз

from tOperations as o,toperationsections as r

Ошибка два

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

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

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

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

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

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

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

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

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

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


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