Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于微调查询的sql问题_Sql - Fatal编程技术网

关于微调查询的sql问题

关于微调查询的sql问题,sql,Sql,我有一个返回多列的存储过程。像可乐可乐可乐。。。。科尔 我是否可以编写另一个查询来获得相同的列,但如果colC/colB,则应该可以。我可能建议添加一个WHERE子句,如下所示: WHERE (colC * 10) < ColB INSERT INTO #myTempTable EXEC myProcedure SELECT * FROM #myTempTable WHERE (colC * 10) < colB 这样你就不用做百分比之类的事情了 您也可以在代码中过滤结果 顺便

我有一个返回多列的存储过程。像可乐可乐可乐。。。。科尔
我是否可以编写另一个查询来获得相同的列,但如果colC/colB,则应该可以。我可能建议添加一个WHERE子句,如下所示:

WHERE (colC * 10) < ColB
INSERT INTO #myTempTable EXEC myProcedure
SELECT * FROM #myTempTable WHERE (colC * 10) < colB
这样你就不用做百分比之类的事情了

您也可以在代码中过滤结果

顺便说一句。。。这就是我如何转换colC/ColB<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,这应该有效。我可能建议添加一个WHERE子句,如下所示:

WHERE (colC * 10) < ColB
INSERT INTO #myTempTable EXEC myProcedure
SELECT * FROM #myTempTable WHERE (colC * 10) < colB
这样你就不用做百分比之类的事情了

您也可以在代码中过滤结果

顺便说一句。。。这就是我如何转换colC/ColB<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我假设这里的问题是您无法使用内联SELECT语句获得存储过程的结果;对的换句话说,你想说

SELECT * FROM myProc WHERE (colcC / colB) < .1
2选择您感兴趣的行,如下所示:

WHERE (colC * 10) < ColB
INSERT INTO #myTempTable EXEC myProcedure
SELECT * FROM #myTempTable WHERE (colC * 10) < colB
借用了Narnian的colC*10技巧


祝你好运

我假设这里的问题是无法使用内联SELECT语句获取存储过程的结果;对的换句话说,你想说

SELECT * FROM myProc WHERE (colcC / colB) < .1
2选择您感兴趣的行,如下所示:

WHERE (colC * 10) < ColB
INSERT INTO #myTempTable EXEC myProcedure
SELECT * FROM #myTempTable WHERE (colC * 10) < colB
借用了Narnian的colC*10技巧


祝你好运

您需要使用table variable@或temp table,因为您不能直接从存储过程的结果集中选择:

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

INSERT INTO @table
EXEC StoreProcedureName

SELECT * FROM @table WHERE colC * 10 < colB

您需要使用table variable@或temp table,因为您不能直接从存储过程的结果集中选择:

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

INSERT INTO @table
EXEC StoreProcedureName

SELECT * FROM @table WHERE colC * 10 < colB

我认为问题在于无法修改存储过程,因此不能将WHERE子句直接应用于结果。Ok。说得好。如果是这样,那么您的解决方案是有效的。如果他能写一个新的存储过程,那么他就可以使用这个解决方案。我非常喜欢colC*10技巧。很好地避免了不同数据类型的问题。我认为问题在于存储过程无法修改,因此不能将WHERE子句直接应用于结果。好的。说得好。如果是这样,那么您的解决方案是有效的。如果他能写一个新的存储过程,那么他就可以使用这个解决方案。我非常喜欢colC*10技巧。很好地避免了不同数据类型的问题。谢谢大家。我用这个检查一下。谢谢大家。我用这个检查一下。