SQL Условный Где

голоса
8

У меня есть хранимая процедура называется spGetOrders, который принимает несколько параметров: @startdate и @enddate. Это запрашивает «Orders» таблицу. Один из столбцов в таблице называется «ClosedDate». Этот столбец будет держать NULL, если заказ не был закрыт или значения даты, если оно имеет. Я хотел бы добавить @Closed параметр, который будет принимать значение бита. В простом мире, я был бы в состоянии сделать ..

select * from orders o
where o.orderdate between @startdate AND @enddate
and (if @Closed = 1 then o.ClosedDate IS NULL else o.ClosedDate IS NOT NULL)

Очевидно, что это не будет работать .. Я также глядя на динамический SQL, который является моим последним средством, но начинает выглядеть как ответ ..

Пожалуйста помоги..

Задан 09/12/2008 в 17:42
источник пользователем
На других языках...                            


4 ответов

голоса
14

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

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 And o.ClosedDate IS NULL) Or (@Closed = 0 And o.ClosedDate IS NOT NULL))

Будьте осторожны варьироваться смешивания и либо для повышения находится в ИНЕКЕ. При этом, скобка контролировать порядок оценки является очень важным.

Ответил 09/12/2008 в 17:48
источник пользователем

голоса
2

SQL заявление:

SELECT *  
FROM orders  
WHERE orderdate BETWEEN @startdate AND @enddate  
AND (@Closed = 1 OR CLosedDate IS NOT NULL)
Ответил 09/12/2008 в 17:46
источник пользователем

голоса
0

Основном, записать его.

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 and o.ClosedDate IS NULL)
    or (@Closed != 1 and o.ClosedDate IS NOT NULL))

двойной, могут быть удалены

Ответил 09/12/2008 в 17:50
источник пользователем

голоса
0

Или это:

select * from orders o
where o.orderdate between @startdate AND @enddate
and (  (@Closed = 1 AND o.ClosedDate IS NULL)
     OR (ISNULL(@Closed, 0) <> 1 AND o.ClosedDate IS NOT NULL)
     )

Похоже, что вы хотите, чтобы все заказы между двумя датами, которые имеют противоречивую Закрыть информацию. Другие предложения, вероятно, так же хорошо (или лучше), но я уверен, что это работает и читается мне (большинство других предложений появилось как я печатал).

Удачи!

Ответил 09/12/2008 в 17:48
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more