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

Откуда:
Сообщений: 98
SELECT * FROM (
(SELECT
[Период] = CAST(F.Год AS VARCHAR) + ' г. ' + Период,
[Задолженность на начало периода, руб.] = CAST(F.[Долг] + F.[Оплачено] AS DECIMAL(16,2) ),
[Начислено, руб.] = CAST( F.[Начислено к оплате] AS DECIMAL(16,2) ),
[Оплачено, руб.] = CAST( F.[Оплачено] AS DECIMAL(16,2) ),
[Итоговая задолженность, руб.] = CAST(F.Итого AS DECIMAL(16,2) )

FROM FTable AS F
) AS T
COMPUTE SUM(T.[Начислено, руб.]),
SUM(T.[Оплачено, руб.])

Все хорошо работает.
Как мне получить в конце отчета, в заголовке не sum, а что-то заданное для пользователя, например Сумма1,
Сумма2. И если этот запрос зашит в серверную процедуру, то как присвоить результат суммы локальной переменной в проц-ре ?
15 фев 12, 10:53    [12093619]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Compute  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Извините, начало вопроса не вставил:

Здравствуйте, есть вопрос по такому запросу
15 фев 12, 10:55    [12093633]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Compute  [new]
iljy
Member

Откуда:
Сообщений: 8711
Виктор_sql,

вообще предложение COMPUTE - это какая-то чужеродная и атавистическая для скуля приблуда. Она возвращает отдельнй рекордсет и, соответственно, пригодна только для возврата результата клиенту.
15 фев 12, 11:11    [12093765]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Compute  [new]
iljy
Member

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

не дописал
Для получения дополнительных результатов сохраните полученную выборку во временную таблицу, а потом извлекайте из нее любые данные в локальные переменные и отправляйте клиенту в любом формате.
15 фев 12, 11:12    [12093777]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Compute  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Вообще лучше не использовать COMPUTE, т.к.
В следующей версии Microsoft SQL Server эта возможность будет удалена. 
Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, 
в которых она в настоящее время используется.
Вместо этого используйте инструкцию ROLLUP. 


кстати в SQL 2012 уже не поддерживается ;)))
15 фев 12, 11:24    [12093872]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Compute  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
и ещё:
a COMPUTE clause is not allowed in an INSERT SELECT statement.
15 фев 12, 11:25    [12093877]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Compute  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Понятно,
спасибо за подсказку.
15 фев 12, 11:41    [12094020]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить