если заявление в sql server - PullRequest
1 голос
/ 25 декабря 2011

Я получаю следующую ошибку:

Incorrect syntax near 'cast', expected 'AS'.

в этой строке:

  use SalesDWH
go
if (select isnumeric(result))=1
begin
select  max(cast(result) as decimal(10,2)) from testresults 

end

Таблица testresults содержит около 21 миллиона строк данных.

что я делаю не так?Большое спасибо.

Спасибо всем за помощь.

Я изменил код на:

 use SalesDWH
    go
    if (select isnumeric(result))=1
    begin
    select  max(cast(result as decimal(10,2))) from testresults

    end

и теперь я получаю сообщение об ошибке:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'result'.

это определенно верный столбец

я принял предложение Криса и сделал следующее:

 use SalesDWH
    go
    SELECT MAX( CAST( [Result] AS DECIMAL(9,2) ) )
FROM [testresults]
WHERE ISNUMERIC( [Result] ) = 1

    and dbo.isReallyNumeric([Result]) = 1 
    and dbo.isReallyInteger([Result]) = 1 

функции здесь http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html

ирезультат, который я получил, был NULL !!!!!

мне нужен числовой результат.Что я делаю не так?

Вот пример данных:

625857  AMPH-AMPHETAMINES   357.1   EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625858  AMP_C-Amphetamine   NEGATIVE    EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625859  BARB-BARBITURATES   7.1 EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625860  BENZ-BENZODIAZEPINES    1.2 EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625861  COCN-COCAINE METABOLITES    -105.5  EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625862  CR-CREATININE (CHEMICAL)    57.8    EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625863  ETOH-ETHANOL    134.5   EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625864  METAMP_C-Methamphetamine    NEGATIVE    EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625865  METD-METHADONE  -32.3   EBB74CF9-D12D-4FBC-917F-91D9DAC169F3

Спасибо за вашу помощь.я думаю, что все ближе:

 select MAX(cast(char_value as decimal(10,2))) from
        (SELECT 
    Char_Number = CASE 
        WHEN id <= 255 THEN RTRIM(id) 
        ELSE '-' END, 
    Char_Value = RTRIM(CASE 
        WHEN id <= 255 THEN CHAR(id) 
        ELSE result END), 
    is_numeric = ISNUMERIC(result), 
    is_really_numeric = dbo.isReallyNumeric(result), 
    is_really_integer = dbo.isReallyInteger(result) 
FROM 
    testresults 
WHERE 
    ISNUMERIC(result) = 1 
    OR dbo.isReallyNumeric(result) = 1 
    OR dbo.isReallyInteger(result) = 1 
 )

    where is_really_numeric=1

но я получаю эту ошибку:

Msg 156, Level 15, State 1, Line 20
Incorrect syntax near the keyword 'where'.

Ответы [ 3 ]

2 голосов
/ 25 декабря 2011

обновлено в зависимости от того, что вы искали

SELECT MAX( CAST( [Result] AS DECIMAL(10,2) ) )
FROM [testresults]
WHERE ISNUMERIC( [Result] ) = 1;
1 голос
/ 25 декабря 2011

Попробуйте это

use SalesDWH
go
SELECT MAX(CAST(Result AS DECIMAL(10,2))) FROM testresults WHERE isnumeric(result)=1

Но если вы получите NULL в результате даже с этим:

and dbo.isReallyNumeric([Result]) = 1 
and dbo.isReallyInteger([Result]) = 1 

тогда это может быть фактический результат - в столбце нет никаких числовых значений

OR

действительно числовые значения столбца дополняются пробелами влево или вправо и т. Д ...

OR

вы разбрасываете все поплавки этим dbo.isReallyInteger([Result]) = 1, и у вас нет чистых целых чисел в таблице

0 голосов
/ 25 декабря 2011

Если вы все еще получаете ошибку, просто укажите псевдоним для своей внутренней таблицы.

select MAX(cast(char_value as decimal(10,2))) from
        (SELECT 
    Char_Number = CASE 
        WHEN id <= 255 THEN RTRIM(id) 
        ELSE '-' END, 
    Char_Value = RTRIM(CASE 
        WHEN id <= 255 THEN CHAR(id) 
        ELSE result END), 
    is_numeric = ISNUMERIC(result), 
    is_really_numeric = dbo.isReallyNumeric(result), 
    is_really_integer = dbo.isReallyInteger(result) 
FROM 
    testresults 
WHERE 
    ISNUMERIC(result) = 1 
    OR dbo.isReallyNumeric(result) = 1 
    OR dbo.isReallyInteger(result) = 1 
 ) myInnerTable

    where is_really_numeric=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...