我真的想自己想出这个解决方案,但事实证明这比我想象的要稍微复杂一些。有条件的地方;对于SQLServer2008 SQL查询/ TSQL
我试图检索信息的表格看起来像下面的简单形式。
表:CarFeatures
+---+---+---+---+-----+
|Car|Nav|Bth|Eco|Radio|
+---+---+---+---+-----+
|a |y |n |n |y |
+---+---+---+---+-----+
|b |n |y |n |n |
+---+---+---+---+-----+
|c |n |n |y |n |
+---+---+---+---+-----+
|d |n |y |y |n |
+---+---+---+---+-----+
|e |y |n |n |n |
+---+---+---+---+-----+
在SSRS报告,我需要显示所有具有所有从给定参数的功能的汽车。这将从报告中接收参数,如:Nav-yes/no,Bth-yes/no,Eco-yes/no,Radio-yes/no。
举例来说,如果参数输入为“是”的导航和“否”别人,结果表应该是这样的;
+---+----------+
|Car|Features |
+---+----------+
|a |Nav, Radio|
+---+----------+
|e |Nav |
+---+----------+
我认为这很简单,但是当我尝试完成查询时,这有点让我发疯。以下是我认为最初会让我得到我需要的东西,但没有。
select Car,
case when @nav = 'y' then 'Nav ' else '' end +
case when @bth = 'y' then 'Bth ' else '' end +
case when @eco = 'y' then 'Eco ' else '' end +
case when @radio = 'y' then 'Radio ' else '' end As Features
from CarFeatures
where (nav = @nav -- here I don't want the row to be picked if the input is 'n'
or bth = @bth
or eco = @eco
or radio = @radio)
基本逻辑应该是这样的,如果没有为每个参数是一排“是”,列出了我所有特性,“是”该行,即使参数是“不”为那些其他功能。
此外,我不考虑过滤报告。我希望这是存储过程本身。
我当然希望避免考虑我有4个参数和4中,如果可能不是一个更好的事情做多排列IFS。
谢谢。
你可以使用'如果-else'逻辑存储过程 – Milen
你可以声明@SQL为nvarchar(最大),建立一个查询字符串,你想和EXEC( @SQL)放到临时表中,或者回到调用者。您还可以查看FOR XML的用法。通过这种方式,您可以将汽车功能连接成一列,而另一辆车连接到另一辆车。 – Pierre
这是针对非规格化数据的问题之一。 – Jodrell