2015-01-13 5 views
0

В настоящее время я использую этот оператор SQL ниже для изучения записей в базе данных, а поля conWkActual, conWkPlanned и conWkBaseline - это значения даты. Поле conWkBaseline всегда имеет значение, а два других могут быть NULL. Но если conWkPlanned имеет значение, это более актуально, чем conWkBaseline, и если conWkActual имеет значение, то оно, в свою очередь, более актуально, чем conWkPlanned. Я хотел бы знать, могу ли я иметь вложенный подзапрос, который будет выводить только самую релевантную дату вместо всех трех. Например, если все три имеют значение, а затем определить, если conWkActual имеет значение, то вывод, что значение только вКак написать условный вложенный подзапрос

SELECT C.conContractID, C.conWkActual, C.conWkPlanned, C.conWkBaseline, C.conService, 
C.conCapRev, C.conContractType, C.conSection, C.conContractStatus FROM Contracts C 
WHERE ConContractStatus = 'Cancelled'; 
+0

Вы можете использовать 'COALESCE 'как упомянуто здесь http://msdn.microsoft.com/en-us/library/ms190349.aspx –

ответ

1

Я предполагаю, что вам нужно наиболее соответствующее поле даты из conWkActual, conWkPlanned и conWkBaseline, если они не равны нулю. Если это так, то COALESCE будет делать работу, если Вам нужно получить не NULL значения для наиболее релевантного поля даты

SELECT C.conContractID, COALESCE(C.conWkActual, C.conWkPlanned, C.conWkBaseline) AS 'YourDatecolumn', C.conService, C.conCapRev, C.conContractType, C.conSection, C.conContractStatus 
    FROM Contracts C 
    WHERE ConContractStatus = 'Cancelled'; 

Вот ссылка для более подробного объяснения на COALESCEhttp://msdn.microsoft.com/en-us/library/ms190349.aspx

+0

Спасибо. Это, похоже, делает трюк – AJF

+0

Я правильно говорю, что порядок, который перечислены в скобках коалесценции, важен, т. Е. В этом случае conWkActual будет первым, поскольку он наиболее уместен? – AJF

+0

Да, если вы читаете о 'COALESCE', он разрешает первое значение, если его« NULL »затем переходит к следующему, а если« NOT NULL », то это значение выбирается. –