Синтаксис SQL Server для выбора двух строк данных и значений перезаписи, отличных от первой строки - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть таблица, которая выглядит следующим образом:

id,  Name,     LinkBackId, Param1, Param2, Param3
1,  "Name1",   NULL,       10,     20,     30    
2,  "Name2",   NULL,       10,     20,     30 
3,  "Name3",   2,          14,     NULL,   NULL

LinkBackId важен здесь, потому что он связан с идентификатором, который также находится в этой таблице. Глядя на строку 3, LinkBackId содержит 2. Я хочу, чтобы он возвращал строку с id = 0 и объединял значения из строки 3 в результат следующим образом:

3,  "Name3", 2, 10, 20, 30

Я рассматриваю строки, содержащие NULL в LinkBackId, как «главную» строку параметров. Строки, содержащие linkbackid, должны быть переопределены основными значениями, которые не равны NULL.

Мне интересно, есть ли изящный способ сделать это вместо использования множества операторов if.

Надеюсь, это имеет смысл.

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 сентября 2009

Вот запрос, который будет возвращать значения из строки, если только он не имеет значения LinkBackId, в этом случае он будет использовать значения из этой строки:

SELECT 
  t1.id,
  t1.Name,
  t1.LinkBackId,
  COALESCE(t2.Param1,t1.Param1),
  COALESCE(t2.Param2,t1.Param2),
  COALESCE(t2.Param3,t1.Param3)
FROM table t1
LEFT OUTER JOIN table t2
  ON t1.LinkBackId = t2.id

Он не будет работать с несколькими уровнями вложенности (т. Е. Если строка 2 ссылается на строку 1). Он работает с помощью функции COALESCE, которая возвращает параметр из основной строки, если в строке LinkBackId нет значений.

0 голосов
/ 15 сентября 2009

Если вы хотите обновить строку 2 значениями из строки 3?

если так, то попробуйте это

Update tu Set 
    name = o.Name,
    linkbackId = o.LinkbackId,
    param1 = o.param1,
    param2 = o.param3,
    param3 = o.param3
From Table tu 
  Join Table tr
     On tr.LinkbackId = tu.Id
Where tu.id = 2

РЕДАКТИРОВАТЬ: Не то, что вы хотите, извините

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...