2014-11-27 6 views
0

я написал SQL запрос, и мой пример запроса, как показано ниже:Использование Extraction в SQL Server

select 
    value1, 
    value2, 
    value3, 
    (
     select CAST(amount1 as decimal(17,2)) from 
     table1 where something...) 
     - select CAST(amount2 as decimal(17,2)) from table1 where something...) 
    ) as 'Total Purchase' 

    from 
     table1 
    where 
     something 

Но, я получаю ошибку синтаксиса в «-» оператора.

я пытался использовать «Установить» заявление как ниже

Declare 
    @value1 decimal(17,2), 
    @value2 decimal(17,2), 
    @result decimal(17,2) 

set value1 = select CAST(amount1 as decimal(17,2)) from table1 where something...); 
set value2 = select CAST(amount2 as decimal(17,2)) from table1 where something...); 
set result = value1 - value2; 

, но я снова получаю ошибку синтаксиса,

Что я могу использовать вместо «-» оператора.

Thnaks за совет ,,

+0

Добавить '(' 'в чем-то ...) - выберите 'right before' select' –

+0

Ваш код пытается вычесть таблицу из числа. Почему второй выбирает? Что ты пытаешься сделать? Найдите разницу в размере двух строк? «Что-то» очень важно, так как вы можете получить обе суммы с самостоятельным присоединением. Или вы пытаетесь вычесть два значения столбца из одной строки? –

+0

@Mahmut EFE Ваши подзадачи должны возвращать только одну строку, поэтому вы можете использовать (SELECT SUM (amount1) ..) - (SELECT SUM (amount2) ....) –

ответ

3

В вашем sql-файле много чего не так. попробуйте это

SELECT value1, 
     value2, 
     value3, 
     (SELECT Cast(amount1 AS DECIMAL(17, 2)) 
     FROM table1 where something...) - (SELECT Cast(amount2 AS DECIMAL(17, 2)) 
          FROM table1 where something...) AS 'Total Purchase' 
FROM table1 

или

DECLARE @value1 DECIMAL(17, 2), 
     @value2 DECIMAL(17, 2), 
     @result DECIMAL(17, 2) 

SET @value1 = (SELECT Cast(amount1 AS DECIMAL(17, 2)) 
       FROM table1 where something...) 
SET @value2 = (SELECT Cast(amount2 AS DECIMAL(17, 2)) 
       FROM table1 where something...) 
SET @result = @value1 - @value2; 
1

Просто синтаксическая ошибка, я считаю, что это должно быть так:

( 
(select CAST(amount1 as decimal(17,2)) from table1 where something...) - (select CAST(amount2 as decimal(17,2)) from table1 where something...) 
) as total purchase 
+0

Спасибо за ваш ответ. но это не сработало. Я получаю такую ​​же ошибку. –

+0

@MahmutEFE, что вы пытаетесь сделать? Код не имеет никакого смысла, так как важные части, такие как предложение WHERE, отсутствуют –

1

Если я понял правильно, Опубликованная запрос может быть упрощен до уровня ниже

select 
    value1, 
    value2, 
    value3, 
    CAST(amount1 as decimal(17,2)) - CAST(amount2 as decimal(17,2)) as 'Purchase' 
    from 
     table1 
    where 
     something 

(OR) пытаются делать то же самое, используя внешний запрос, как

select value1, value2,value3, (amt1 - amt2) as 'Total Purchase' 
from 
( 
select 
    value1, 
    value2, 
    value3, 
    CAST(amount1 as decimal(17,2)) as amt1, 
    CAST(amount2 as decimal(17,2)) as amt2 
    from 
     table1 
    where 
     something 
) tab 
1

в случае 'чего-то ...' равно всего где starments

select 
     value1, 
     value2, 
     value3, 
     (
      select (CAST(amount1 as decimal(17,2)) - CAST(amount2 as decimal(17,2))) 
     ) as 'Total Purchase' 

     from 
      table1 
     where 
      something 
Смежные вопросы