2013-07-05 4 views
1

Я новичок в sql-сервере. У меня возникла проблема при выборе значений для отчета. я имею следующие столбцы:Выберите Отрицательные значения, только если они существуют в SQL Server

name, snap, current, percent. 

я хочу, чтобы выбрать только отрицательные значения, если существует в колонке «процент», если не выбрать анолит только значение.

, например:

, если я с -1, -10, 0, 10, то он должен выбрать только -1, -10.

Я попробовал следующий запрос, но дал оба значения + ve и -ve.

selectname, snap, current, percent 
where percent = 
CASE WHEN percent < 0 then percent 
when percent > 0 then percent 

Я не знаю, как использовать, если еще в том месте условия. Может кто-нибудь мне помочь ? Заранее спасибо.

+0

Если существуют отрицательные значения _at all_ в таблице, или _for, что имя/оснастке/current_? –

+2

, пожалуйста, не используйте сокращенную форму, как «+ ve», это делает ее жестокой для чтения. – Crisfole

+0

для колонки% @Joachim – user2499976

ответ

2

Вы можете использовать IF EXISTS, чтобы проверить состояние и затем получить желаемый результат

IF EXISTS(SELECT * FROM TABLENAME WHERE percent < 0) 
BEGIN 
    SELECT [name], [snap], [current], [percent] FROM TABLENAME WHERE [percent] < 0 
END 
ELSE BEGIN 
    SELECT [name], [snap], [current], [percent] FROM TABLENAME WHERE [percent] > 0 
END 
2

Вы можете попробовать использовать UNION ALL для разделения двух условий. Из-за их противоположности только одна часть запроса вернет строки.

SELECT [name], [snap], [current], [percent] 
FROM Table1 
WHERE EXISTS (SELECT * FROM Table1 WHERE [percent] < 0) 
AND [percent] < 0 

UNION ALL 

SELECT [name], [snap], [current], [percent] 
FROM Table1 
WHERE NOT EXISTS (SELECT * FROM Table1 WHERE [percent] < 0) 
AND [percent] > 0 

SQLFiddle DEMO

Demo with non-negative values