2010-07-18 2 views
0

В двух словах, вот что я хочу, чтобы это произошло:Как я могу закодировать это интересно Условие Регистрации SQL

Завершить соединение, если строки не существуют сделать то же самое присоединиться, но с использованием одного другого значения для заполнения нуля столбцов в каждой строке.

Вот мои JOIN:

Left Join CMS_ECH.dbo.hsplit hsplit on hsplit.row_date = ANDREWSTABLE.SegStart_Date 
and hsplit.split=ANDREWSTABLE.dispsplit 
and hsplit.starttime = ANDREWSTABLE.Interval 
and hsplit.acd = ANDREWSTABLE.acd1 

Где ACD1 либо 1 или 4.

Для некоторых строк там будет обнуляет.

Если результат объединения возвращает нулевую строку row_date, тогда ... и вот где мои знания не позволяют мне ... так что ради других слов, чтобы описать это ... воссоединиться с нулевыми строками в таблице используя другое значение для acd1. Если acd1 = 1, то используйте 4. Если acd1 будет 4 затем использовать 1.

Я использую MS SQL 2005

ответ

0

Большинство (если не все) SQL диалекты имеют ISNULL() или COALESCE() функцию, которая позволяет определить альтернативное значение, когда базовый столбец равен NULL.

+0

Использование MS SQL 2005, спасибо! – CodingIsAwesome

1

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

SELECT COALESCE(hsplit.requiredfield, hsplit2.requiredfield) AS requiredfield, 
... 
Left Join CMS_ECH.dbo.hsplit hsplit on hsplit.row_date = ANDREWSTABLE.SegStart_Date 
and hsplit.split=ANDREWSTABLE.dispsplit 
and hsplit.starttime = ANDREWSTABLE.Interval 
and hsplit.acd = ANDREWSTABLE.acd1 
Left Join CMS_ECH.dbo.hsplit hsplit2 on hsplit2.row_date = ANDREWSTABLE.SegStart_Date 
and hsplit2.split=ANDREWSTABLE.dispsplit 
and hsplit2.starttime = ANDREWSTABLE.Interval 
and CASE WHEN hsplit2.acd = 1 THEN 4 WHEN hsplit2.acd = 4 THEN 1 WHEN ... END = ANDREWSTABLE.acd1     
Смежные вопросы