【问题标题】:select a limited amount of results based on column根据列选择有限数量的结果
【发布时间】:2012-05-16 03:13:15
【问题描述】:

我已尝试查看此问题sql - distinct + select,但似乎无法根据我的情况正确调整它。我也不在 sql 开发团队,所以我不知道数据库的所有进出。我在测试数据库的黑暗中拍摄。这是我当前查询的伪样本:

select a.name, b.col1, 
from name a, amount b
where a.identifier=b.acctid
and b.col1 != 'test'

查询当前返回的示例:

a.name | b.col1
Jeff     1
Jeff     333
Jeff     77
Jeff     1
Jeff     14
Bob      22
Bob      4
Bob      5
Bob      6

我希望查询结果返回基于 ColA 唯一的前 n 个(我选择的数字)结果。例如,如果 n 为 2:

a.name | b.col1
Jeff     1
Jeff     333
Bob      22
Bob      4

【问题讨论】:

  • 您想要每个 ColA 的前 2 个吗?您将用于订购此列的名称是什么?请进行伪查询,结果列具有相同的列名。
  • 对不起,我忘记更新结果集以匹配查询,完成。
  • 您使用的是 SQL Server 2005 或更高版本吗?
  • 不知道。就像我说的那样,到目前为止我得到的信息很少,而且查询非常简单,所以我知道列名。基本上,如果我等一两天,我就会得到我需要的所有信息。我只是没有耐心,想开始。

标签: sql oracle filter unique distinct


【解决方案1】:

对于 SQL Server 2005+,您可以使用分析函数:

DECLARE @n INT
SET @n = 2

;WITH CTE AS 
(   SELECT a.name, b.col1, b.col2, ROW_NUMBER() OVER(PARTITION BY ColA ORDER BY a.identifier) Corr
    FROM name a
    INNER JOIN amount b
    ON a.identifier = b.acctid
    WHERE b.col2 != 'test'
)
SELECT *
FROM CTE
WHERE Corr <= @n

我还更改了您的查询以使用显式联接。

【讨论】:

  • @TimLehner - 是的,是的。我现在改了,谢谢提醒
  • 它显然不喜欢声明和设置。抛出错误:ORA-06550:第 1 行,第 9 列:PLS-00103:在预期以下情况之一时遇到符号“@”:
  • @whitewolfpgh - ORA-06550?,所以您使用的是 Oracle 而不是您的问题中所述的 SQL Server?。在任何情况下,该部分只是在您的问题上明确n,您可以只过滤没有该部分的查询并将@n 更改为您想要的数字
  • 是的,有人告诉我它是 sql,并且给我的查询不是特定于语言的。这是一个基本的选择语句。这是我收到的第一个错误,所以是的,它似乎是它的神谕。我告诉过你我得到了一个黑匣子。
  • 用简单的select语句很难区分sql和pl/sql。
【解决方案2】:

第 1 步:

使用该信息创建一个临时表,并为每个 ColA 类型创建具有自动增量值的另一列。

第 2 步:

选择新列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2020-06-29
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多