根据另一个查询的结果运行选择查询。

3

我有一个带有两列数字的表,分别是column1和column2,并且这些列都填充了数千个字段。

我首先运行以下代码:

    select top (10) PERCENT
    col1
    from newtable

对于这个查询,我得到了300个结果。基于这些结果,我想运行一个类似上面的查询,但是使用我的第二个表列。
    select top (10) PERCENT
    col2
    from "based on the results in the first query"

有没有办法通过嵌套查询或类似的方式实现这个功能?


1
这不太清楚。你想做什么?如果你想要10%的10%,只需先选择1%即可。提供样本数据和期望结果将有助于澄清你的问题。 - GMB
你需要在存储过程或外部脚本语言中动态执行此操作,因为你不能使用纯 SQL 动态引用数据库对象(表、视图、列等)。基本上,从第一个 SQL 语句获取结果,然后通过循环遍历结果来执行第二个语句。 - JNevill
2个回答

3

没有更多的细节和样本数据,我不能确定这对你是否有效,但看起来你想要像这样的东西。

SELECT TOP (10) PERCENT
       col2
FROM   newtable
WHERE  col1 IN (
                   SELECT TOP (10) PERCENT col1 FROM newtable
               );

2
可以使用子查询,如果所有列都包含在内部查询中,如下所示:
SELECT TOP(10) PERCENT col2
FROM 
    (
        SELECT TOP(10) PERCENT col1, col2
        FROM SomeTable
    ) AS TopTenPercent

我不确定这个查询是否有用,因为它不能保证你会得到哪些行。这是因为SQL Server在优化查询时可以以任何方式排列表中的行。因此,这只会给你选择1%行的col2。

如果你想按某种方式获取前10%的值,则需要使用ORDER BY。因此,要获取第二列前10%的值,并按照第一列前10%的值降序排序的行进行升序排序,则应使用以下命令:

SELECT TOP(10) PERCENT col2
FROM 
    (
        SELECT TOP(10) PERCENT col1, col2
        FROM Scrap
        ORDER BY col1 DESC
    ) AS TopTenPercent
ORDER BY col2 ASC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接