select * from MYTABLE t 
where EQUIPMENT = 'KEYBOARD' and ROWNUM <= 2 or
EQUIPMENT = 'MOUSE' and ROWNUM <= 2 or
EQUIPMENT = 'MONITOR' and ROWNUM <= 2; 
我正在尝试运行一个返回字段(即设备)匹配的查询,并将每种类型设备的输出限制为每个设备类型2个记录或更少.我知道这可能不是使用多个where子句的最佳方法我过去使用过这个或者语句,但是不能用于rownum.它似乎只返回最后一个where语句.提前致谢..
WITH numbered_equipment AS (
  SELECT t.*,
         ROW_NUMBER() OVER( PARTITION BY EQUIPMENT ORDER BY NULL ) AS row_num
  FROM   MYTABLE t 
  WHERE  EQUIPMENT IN ( 'KEYBOARD', 'MOUSE', 'MONITOR' )
)
SELECT *
FROM   numbered_equipment
WHERE  row_num <= 2;
如果要根据其他列确定选择哪些行的优先级,则修改ORDER BY NULL查询的一部分,以便将优先级最高的元素放在顺序中.
编辑
要拔出设备匹配且状态为活动的行,请使用:
WITH numbered_equipment AS (
  SELECT t.*,
         ROW_NUMBER() OVER( PARTITION BY EQUIPMENT ORDER BY NULL ) AS row_num
  FROM   MYTABLE t 
  WHERE  EQUIPMENT IN ( 'KEYBOARD', 'MOUSE', 'MONITOR' )
  AND    STATUS = 'Active'
)
SELECT *
FROM   numbered_equipment
WHERE  row_num <= 2;
| 归档时间: | 
 | 
| 查看次数: | 5050 次 | 
| 最近记录: |