甲骨文使用等级

强尼

表一

Id1| Level     |Type|Survey Nr
--------------------------------
  1| Level 1   |A   |1  
  2| Level 2   |A   |1
  3| Level 3   |A   |1
  4| All Levels|A   |1   
 ------------------------------- 
  5| Level 1   |B   |1 
  6| Level 2   |B   |1
  7| Level 4   |B   |1
 -------------------------------- 
  8| Level 1   |A   |2 
  9| Level 2   |A   |2
 10| Level 3   |A   |2
 11| All Levels|A   |2      

我想按类型对数据进行分组并调查Nr,查询的输出为

1. All levels   |A   |1
2. Level 1      |B   |1 
3. Level 2      |B   |1
4. Level 4      |B   |1
5. All Levels   |A   |2

因此,当我的子类型/调查组的级别为“所有级别”时,我只会显示情况A -1和情况A2之类的记录,否则我希望显示所有情况B-1的情况。

哈特公司

您可以使用RANK()函数和一条CASE语句来做到这一点

WITH cte AS (SELECT "Id1","Lev","Type","Survey_Nr"
                    ,RANK() OVER (PARTITION BY "Type","Survey_Nr" ORDER BY CASE WHEN "Lev" = 'All Levels' THEN 0 ELSE 1 END) AS RN
             FROM Table1)
SELECT *
FROM cte
WHERE RN = 1
ORDER BY "Id1"

演示:SQL Fiddle

RANK()将为PARTITION BY子句中指示的每个集合分配一个等级值,并且中的CASE语句ORDER BY用于将Lev的所有值设置为两个类别之一,优先考虑“所有级别”值。在不带WHERE子句的情况下运行此命令将有助于您了解RANK()函数的工作方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章