我真的想自己想出這個解決方案,但事實證明這比我想象的要稍微複雜一些。有條件的地方;對於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