Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
Можно ли в запросе ссылаться на вычисляемые поля ? если да то как ? (интересует для MS SQL 7 и 2000) пример : SELECT a.Agr_id, a.Dep, (SELECT SUM(Price) FROM Cars WHERE Agr_id=a.Agr_id) AS CarSum a.Summ*a.Rate as ConvSum .... WHERE CarSum<=@MaxSum and ConvSum>=@MaxSum ORDER BY a.Dep COMPUTE SUM(CarSum), SUM(ConvSum) BY a.Dep таким образом ничего не получаеться : invalid column name ! если ссылатся на вычисляемые столбцы нельзя, то как рашаються данные задачи ? остаеться использовать только временные таблицы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 10:43 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
SELECT Dep, CarSum, ConvSum FROM (SELECT a.Agr_id, a.Dep, (SELECT SUM(Price) FROM Cars WHERE Agr_id=a.Agr_id) AS CarSum, a.Summ*a.Rate as ConvSum .... WHERE CarSum<=@MaxSum and ConvSum>=@MaxSum ) AS tmp1 ORDER BY Dep COMPUTE SUM(CarSum), SUM(ConvSum) BY Dep ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 11:05 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
Остается только вставлять формулу в предложение where: select a.Price*a.Qnt as Sum from tAccount a where a.Price*a.Qnt > 1000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 11:09 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
Вообще-то на вычисляемые поля ссылаться можно, но это нечто другое. Я на Вашем месте делал бы как-то так(COMPUTE никогда не использовал, так что может так и не подойдет Вам): SELECT a.Agr_id, a.Dep, SUM(a.Price) AS CarSum, SUM(c.Price*a.Rate) as ConvSum .... from ... a , Cars c WHERE CarSum<=@MaxSum and ConvSum>=@MaxSum ... and c.Agr_id=a.Agr_id group by a.Agr_id, a.Dep ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 11:17 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
glory : 1. SELECT Dep, CarSum, ConvSum FROM здесь не пропущенно поле Agr_id ? или так и надо ? мне надо получить список с уникальными Agr_id и для каждой группы у которых одинаковый dep сумму ! 2.запрос данного вида будет работать быстрее чем временные таблицы ? в данный момент у меня сделано так что, мой запрос работает со временной таблицей которая заполняеться с помощью еще одного запроса где тоже производиться дополнительное суммирование и т.д. (используя пердложенную конструкцию подзапросов его тоже можно было бы засунуть внутрь ...) Дмитрий: А если ставить в условие опять выражение то оно будет вычисляться еще раз ?? или будет использованнно уже вычисленное значение ? проблема в том что я написал упрощенный примерчик, а реально в вычислениях у меня используються разультаты подзапросов которые выполняються не так быстро ... sergSuper: а у вас нет ошибки при попытке сделать : WHERE CarSum<=@MaxSum and ConvSum>=@MaxSum ? мне не удаеться например использовать вычисленные поля в WHERE ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 12:18 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
2SergSuper ---------- Такую возможность, выражения с алиасами полей, встречал только в MS Access. SQL Server увы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 13:23 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
К сожалению, как показывает план выполнения, значения будут считаться два раза: в Where, а потом в Select. Но другого способа обращения к вычисляемым полям, скорее всего, нет, поскольку они не существуют на момент проверки условий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 13:38 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
>SELECT a.Agr_id, a.Dep, (SELECT SUM(Price) FROM Cars WHERE Agr_id=a.Agr_id) AS CarSum >a.Summ*a.Rate as ConvSum .... >WHERE CarSum<=@MaxSum >and ConvSum>=@MaxSum >ORDER BY a.Dep >COMPUTE SUM(CarSum), SUM(ConvSum) BY a.Dep Так как нет полного запроса, то только ориентировочно... SELECT a.Agr_id, a.Dep, MIN(a.Summ*a.Rate) as ConvSum, SUM(c.Price) AS CarSum, FROM a inner join Cars c ON (c.Agr_id=a.Agr_id) AS CarSum GROUP BY a.Agr_id, a.Dep HAVING SUM(c.Price)<=@MaxSum AND MIN(a.Summ*a.Rate) >=@MaxSum ORDER BY a.Dep COMPUTE SUM(SUM(c.Price)), SUM(MIN(a.Summ*a.Rate)) BY a.Dep Хотя, если честно, то смотрится ужасно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 13:40 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
1. >здесь не пропущенно поле Agr_id ? или так и надо ? Тут уж вам решать (у меня же нет ваших таблиц ), я просто показал вам, как можно использовать в качестве источника для SELECT-а другой SELECT . Т.е. SELECT * FROM (SELECT myfield1, (SELECT SUM(myfield2) FROM mytable2 WHERE ...) FROM mytable WHERE ... ) AS tmp1 LEFT OUTER JOIN (SELECT myfield1, (SELECT SUM(myfield2) FROM mytable3 WHERE ...) FROM mytable4 WHERE ... ) AS tmp2 ON tmp2.myfield1 = tmp1.myfield1 ... Для SQL2000 можно также использовать функции, которые возвращают таблицу. 2.>запрос данного вида будет работать быстрее чем временные таблицы ? Скорость выполнение запроса зависит еще от многих условий, например, наличия индексов и статистики. Трудно что-то советовать, не зная ничего о таблицах и задаче, которую нужно решить. В общем случае , конечно, нужно избегать временных таблиц, но в конкретном - временные таблицы, view-ы, индексы или просто промежуточные таблицы с уже рассчитаными заранее итогами(например, для a.Agr_id, a.Dep) за период/на дату - кто знает, что лучше всего скажется на произодительности (а может быть вообще увеличение ресурсов сервера) Точный ответ вам даст аудит выполнения, просмотр execution plan-а и настройка индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 13:47 |
|
||
|
как ссылаться в запросе на вычисляемые поля ?
|
|||
|---|---|---|---|
|
#18+
Хмм... А у Glory почти верно >SELECT a.Agr_id, a.Dep, (SELECT SUM(Price) FROM Cars WHERE Agr_id=a.Agr_id) AS CarSum >a.Summ*a.Rate as ConvSum .... >WHERE CarSum<=@MaxSum >and ConvSum>=@MaxSum >ORDER BY a.Dep >COMPUTE SUM(CarSum), SUM(ConvSum) BY a.Dep Приблизительно так: SELECT a.Agr_id, a.Dep, a.Summ*a.Rate as ConvSum, c.CarSum FROM a INNER JOIN (SELECT Agr_id, SUM(Price) AS CarSum FROM Cars GROUP BY Agr_id) AS c ON (c.Agr_id=a.Agr_id) WHERE c.CarSum<=@MaxSum and a.Summ*a.Rate>=@MaxSum ORDER BY a.Dep COMPUTE SUM(c.CarSum), SUM(a.Summ*a.Rate) BY a.Dep ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2001, 14:04 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3550&tid=1825740]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 380ms |

| 0 / 0 |
