有关微调查询的SQL问题

时间:2011-07-27 16:47:12

标签: sql

我有一个返回多列的存储过程。像colA colB colC .... colL 我可以编写另一个查询来获取相同的列,但是如果colC / colB&lt; 10%,即WHERE过滤10%。基本上应该显示存储过程返回的相同列,但现在只有colC / colB应该<10%。我无法修改存储过程,因为它在另一个应用程序中使用,我只是从中获取值。

3 个答案:

答案 0 :(得分:1)

那应该有用。我可能会建议像这样添加一个WHERE子句:

WHERE (colC * 10) < ColB

这会阻止你做百分比和事情。

您可能只是在代码中过滤结果。

BTW ......这就是我改变colC / ColB&lt;的方法。 10%:

C/B < 10%
C/B < .1     (convert percentage to decimal)
C   < .1B    (multiply both sides by B)
10C < B      (multiply both sides by 10)

您甚至可以编写新的存储过程以接收要返回的百分比金额的变量。那么where子句将是WHERE(colC * @percentage)&lt; COLB

答案 1 :(得分:1)

我假设这里的问题是您无法使用内联SELECT语句获取存储过程的结果;正确?换句话说,你希望能够说,

SELECT * FROM myProc WHERE (colcC / colB) < .1

不起作用,因为你不能在这种情况下处理像表这样的存储过程。

解决此问题的最佳方法是创建一个执行两项操作的新存储过程:

1)将过程的结果复制到临时表中,如下所示:

INSERT INTO #myTempTable EXEC myProcedure

2)选择您感兴趣的行,如下所示:

SELECT * FROM #myTempTable WHERE (colC * 10) < colB

(借用纳尼安的colC * 10技巧。)

祝你好运!

答案 2 :(得分:1)

您需要使用表变量(@)或临时表(#),因为您无法直接从存储过程的结果集中进行选择:

DECLARE @table TABLE (colA int, colB int, colC int, ...)

INSERT INTO @table
EXEC StoreProcedureName

SELECT * FROM @table WHERE colC * 10 < colB