从表中的“分层”数据中提取合并结果

时间:2011-09-12 16:19:51

标签: sql-server entity-framework c#-4.0

我在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 个答案:

答案 0 :(得分:1)

我通过使用从默认(null)车库条目到车库1条目的外部联接来完成此操作。使用COALESCE(),它是一个返回其第一个非null参数的标准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代替。