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

Откуда:
Сообщений: 7
доброе время суток

описание ситуации:
в базе данных (MS SQL 2000) есть записи представленные в разных единицах измерениях
( рубли, тыс.рубл., млн. рублей), в поле EDIZM- информация о коде

ЦЕЛЬ:
необходимо в "ПРЕДСТАВЛЕНИИ" вывести их их в одной единице (например в тыс.рублей)

можно ли стандартным представлением это сделать ?

расчетное поле ei_mnoj формируется без проблем, а вот ссылка на него не работает
(контроль синтасического анализа проходит, а выполнение нет -> выдает ошибку

Сообщение 207, уровень 16, состояние 1, строка 20
Invalid column name 'ei_mnoj'.

при указании @a:= (select ....) тоже валится по ошибке
Сообщение 102, уровень 15, состояние 1, строка 7
Incorrect syntax near ':'.

копировать код (Select .... ) как то не хочется

ПОМОГИТЕ ПЛИИЗ

SELECT  
     
        dbo.TP_0_4.code_id, 
        (Select 
            CASE WHEN dbo.TP_0_4.EDIZM = 383 THEN 0.001
                     WHEN dbo.TP_0_4.EDIZM = 384 THEN 1
                    WHEN dbo.TP_0_4.EDIZM = 385 THEN 1000
                 ELSE 1 
            END AS ei_mnoj
         FROM  dbo.TP_0_4 bd_ei_mnoj
         WHERE dbo.TP_0_4.OKPO = bd_ei_mnoj.OKPO 
         )  AS ei_mnoj, 

        'тыс.рублей' AS ed_izm,

         dbo.TP_1_4.P11503 *  ei_mnoj  AS P_11503,
         dbo.TP_1_4.P11703 *  ei_mnoj  AS P_11703,
         ....................................................

         ...................................................
        '_end'   AS c_end

FROM    
        dbo.TP_0_4 LEFT OUTER JOIN
        dbo.TP_1_4 ON dbo.TP_0_4.OKPO = dbo.TP_1_4.OKPO
1 окт 14, 17:39    [16646185]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Glory
Member

Откуда:
Сообщений: 104751
permstat
расчетное поле ei_mnoj формируется без проблем, а вот ссылка на него не работает
(контроль синтасического анализа проходит, а выполнение нет -> выдает ошибку

Вычислямое поле нельзя использовать на том же уровне вложенности.
Пишите еще олин вложенный запрос
1 окт 14, 17:42    [16646205]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
permstat
Member

Откуда:
Сообщений: 7
как то 50-100 раз напряжительно ....
конечно можно поставить фильтры на ед измерения и вместо одноно представления получить 3
получить 3 результата а потом их совместить а потом их соединить :) но тоже как то не очень красивое решение ...
1 окт 14, 17:46    [16646243]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Glory
Member

Откуда:
Сообщений: 104751
permstat
как то 50-100 раз напряжительно ....

Что 50-100 раз ?
1 окт 14, 17:49    [16646261]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
permstat
Member

Откуда:
Сообщений: 7
копировать исходный код ... :) показатели разные ... :)

dbo.TP_1_4.P11503 * 
(Select  CASE WHEN dbo.TP_0_4.EDIZM = 383 THEN 0.001
                     WHEN dbo.TP_0_4.EDIZM = 384 THEN 1
                     WHEN dbo.TP_0_4.EDIZM = 385 THEN 1000
                    ELSE 1 
            END AS ei_mnoj
   FROM  dbo.TP_0_4 bd_ei_mnoj
   WHERE dbo.TP_0_4.OKPO = bd_ei_mnoj.OKPO 
)    AS P_11503,

dbo.TP_1_4.P11504 * 
(Select  CASE WHEN dbo.TP_0_4.EDIZM = 383 THEN 0.001
                     WHEN dbo.TP_0_4.EDIZM = 384 THEN 1
                     WHEN dbo.TP_0_4.EDIZM = 385 THEN 1000
                    ELSE 1 
            END AS ei_mnoj
   FROM  dbo.TP_0_4 bd_ei_mnoj
   WHERE dbo.TP_0_4.OKPO = bd_ei_mnoj.OKPO 
)    AS P_11504,
.....................................
1 окт 14, 17:56    [16646317]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Напишите функцию. Не помню только - были в 2000 inline или нет. Тогда скалярную, но может упасть производительность.
1 окт 14, 18:04    [16646375]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Glory
Member

Откуда:
Сообщений: 104751
permstat
копировать исходный код ... :) показатели разные ... :)
.
Я говорил про вложеннный запрос вообще то
А не про вычисляемый столбец.
1 окт 14, 18:14    [16646437]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
permstat
Member

Откуда:
Сообщений: 7
прошу прощения ... можно раскрыть вашу фразу "вложенный запрос" подробнее ....
а то интернет мне про вложенные запросы рассказывает

автор

после ключевого слова WHERE, в условие мы записываем еще один запрос. MySQL сначала обрабатывает подзапрос, возвращает id_author=2, и это значение передается в предложение WHERE внешнего запроса.
Источник: http://www.site-do.ru/db/sql5.php
© site-do.ru



не доходит до меня как WHERE поможет перевести представление (50 показателей) из одной единицы в другую ???
1 окт 14, 18:34    [16646583]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Glory
Member

Откуда:
Сообщений: 104751
А причем тут MySQL ?

select * from (select * from (select * from ...)))
1 окт 14, 18:40    [16646613]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
permstat
Member

Откуда:
Сообщений: 7
мда ... сложно и непонятно ...
хоть и не хотелось ... видимо создам таблицу перекодировки 3 записи (ой не хочется в базу лесть с табличными изменениями)...
и свяжу ее с TP_0_4.EDIZM ... все приятнее думаю будет ....
...............
всем спасибо за понимание ...

PS ... если кто что еще что предложит буду очень рад ...
1 окт 14, 19:01    [16646711]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Glory
Member

Откуда:
Сообщений: 104751
Мда

select code_id, ed_izm,
         TP_1_4.P11503 *  ei_mnoj  AS P_11503,
         TP_1_4.P11703 *  ei_mnoj  AS P_11703,
        c_end
from (
SELECT  
        dbo.TP_0_4.code_id, 
        (Select 
            CASE WHEN dbo.TP_0_4.EDIZM = 383 THEN 0.001
                     WHEN dbo.TP_0_4.EDIZM = 384 THEN 1
                    WHEN dbo.TP_0_4.EDIZM = 385 THEN 1000
                 ELSE 1 
            END AS ei_mnoj
         FROM  dbo.TP_0_4 bd_ei_mnoj
         WHERE dbo.TP_0_4.OKPO = bd_ei_mnoj.OKPO 
         )  AS ei_mnoj, 

        'тыс.рублей' AS ed_izm,

         dbo.TP_1_4.P11503,
         dbo.TP_1_4.P11703,
         ....................................................

         ...................................................
        '_end'   AS c_end

FROM    
        dbo.TP_0_4 LEFT OUTER JOIN
        dbo.TP_1_4 ON dbo.TP_0_4.OKPO = dbo.TP_1_4.OKPO
) as a
1 окт 14, 19:19    [16646761]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
permstat
мда ... сложно и непонятно ...
Подумайте над тем, чтобы поменять работу, пока не поздно...
1 окт 14, 20:00    [16646896]     Ответить | Цитировать Сообщить модератору
 Re: использование расчетных полей  [new]
babona
Member [заблокирован]

Откуда: Батуринск
Сообщений: 1816
раньше авторов таких топиков на себя оттягивал Access, теперь последний канул в лету и отдуваться MSSQL
2 окт 14, 00:30    [16647775]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить