用于过滤返回列的SQL查询

时间:2010-07-05 15:58:04

标签: sql sql-server

我想根据另一个表中的某些元数据返回列。即我有一个包含10列的表,另一个表包含那些带有元数据的列的非规范化。

即。 表 - 汽车:

列 - 制作,模型,颜色

和另一个名为“Flags”的表,其中每个上面的列都有一行,每行都有一个“IsSearchable”和“ShowOnGrid”的列 - 这样的东西。 我想要的查询将返回cars表中标记为“标志”表中的所有列为“ShowInGrid”

---- EDIT

道歉,我应该说这是在SQL Server 2008上。 此外,我不想要物理地说明我想要返回的列,即如果我向汽车表添加一列,然后将其添加到Flags表并声明它是可搜索的,我不想必须在SQL查询中物理状态,我想要返回该列,我希望它自动通过。

2 个答案:

答案 0 :(得分:0)

您需要使用动态SQL;这可以通过存储过程轻松完成。

答案 1 :(得分:0)

这样的事可能有用:

Select 
  D.CarID,
  Case D.ShowMake When True Then D.Make Else NULL END AS Make
  ...
From
  (Select
    C.CarID, C.Make, C.Model, C.Colour, F.IsSearchable, F.ShowOnGrid, F.ShowMake
  From 
    Cars C
  Inner Join
    Flags F
      On C.CarID = F.CarID) D

我没有写过所有的case语句,也不知道你工作了多少个标志,但你可以尝试一下。它需要过滤应用程序中的空值。如果您确实希望在Flag列值的基础上省略列,则其他答案和注释都正确。无论是动态SQL还是首先使用其他语言在外部构建查询。