Как я могу кодировать это интересное условие Join SQL - PullRequest
0 голосов
/ 18 июля 2010

В двух словах вот что я хочу сделать:

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

Вот мое объединение:

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.

Для некоторых строк будут нулевые значения.

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

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

Ответы [ 2 ]

1 голос
/ 18 июля 2010

Это будет сделано, оно не будет работать блестяще, так как оператор 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                  
0 голосов
/ 18 июля 2010

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

...