我试图弄清楚如何查询一个表(该表实际上是一个结果集,所以它将是一个子查询),按ColA=ColB
分组(见下文),并在一个步骤中创建一个计算字段。
如果我的测试数据看起来像
ColA ColB ColC
字符串
我想只检索ColA=ColB
的行,并添加一个新列,告诉我ColA
中的原始数据是否重复。
ColA ColB ColC multiples
型
有人能帮我解决语法问题吗?我一直在使用Group By和Subject,但没有用。我需要使用case语句来表示multiplies字段吗?
4条答案
按热度按时间6yoyoihd1#
更有帮助的方法是发布create table和insert语句,而不是Desc table和select * from table_name; http://tkyte.blogspot.com/2005/06/how-to-ask-questions.html
字符串
1.您可以使用Oracle分析函数Lead查看结果集,以查看colA是否与下一行相同(在对其进行排序后),如..。
select * from(select colA,colb,(case when colA =(lead(cola)over(partition by colA order by cola,colb))then 'Yes' else 'No' end)multiples,colc from test_repeat)其中colA = colb /
型
1.或者你可以得到COLA的每个值的计数,并比较它,看看是否有重复的。
select a.colA,a.colb,a.colc,(case when(select count(*)from test_repeat t where t.cola = a.colA)> 1 then 'Yes' else 'No' end)从test_repeat a where colA = colB /
型
它们都同样简单,但我建议使用解析函数方法,因为我发现它对我过去使用过的所有函数都更快。
iswrvxsc2#
字符串
就性能而言,这个SQL近似等于Rajesh的第一个查询。所以你可以选择你更熟悉的那个。
型
mznpcxlj3#
我认为你需要对
multiples
列进行子选择。不需要分组。写如下:字符串
zlwx9yxi4#
我不知道lead函数,非常好。Rob和Rajesh,感谢到目前为止的答案,我想我能够使用两个子查询和一个外部连接部分回答我自己的问题。
我猜我的查询没有其他人发布的那么有效,但我想知道人们是否可以评论这个查询。它总是有效吗?它可以调整以使其更有效吗?* 它仍然需要为倍数输入'是'或'否',现在它将倍数计数或空值设置为0。*
字符串