Извлечение комбинированных результатов из «иерархических» данных в таблицу - PullRequest
1 голос
/ 12 сентября 2011

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

Если у меня есть данные в таблице sql.что-то вроде этого:

ModelName    Color   Garageld

BMW          Black   NULL
Mercedes     Red     NULL
Audi         Yellow  NULL
BMW          Green   1
Mercedes     Blue    1

И теперь, используя LINQtoEntities, мне нужно получить все записи для гаража с id == 1, где он должен объединять записи - Если для гаража и автомобиля определен цвет- получить его, если его нет, взять любой цвет, равный NULL

Таким образом, набор результатов для garageId == 1 должен быть:

Audi         Yellow  
BMW          Green   
Mercedes     Blue

1 Ответ

1 голос
/ 12 сентября 2011

Я бы сделал это, используя внешнее соединение из гаражных записей по умолчанию (ноль) к гаражу 1.Используйте COALESCE (), которая является стандартной функцией SQL, которая возвращает свой первый ненулевой аргумент.

SELECT dflt.ModelName, COALESCE(g.Color, dflt.Color) AS Color
FROM mytable AS dflt
LEFT OUTER JOIN mytable AS g
  ON dflt.ModelName = g.ModelName AND g.GarageId = 1
WHERE dflt.GarageId IS NULL

Когда для данной модели не найдена запись гаража 1, внешнее объединение делает все столбцы пустыми для g.*, поэтому COALESCE () пропустит g.Color и будет использоватьdflt.Color вместо.

...