查询中的distinct或group by

时间:2017-12-27 14:30:55

标签: oracle group-by distinct

我有一个查询来检索oracle数据库中某些表的数据。

我最终需要的是获取所有不重复的数据,为了实现这一点,我需要所有不具有相同FOLIO,TARJETA,CUENTA和IMPORTE的记录。 所以为此,我尝试使用Distinct和Group by但我不知道在脚本中应该在哪里/如何使用它,如果它可能在哪里可以更有效。

我尝试将GROUP BY与ORDER BY之前的值放在一起,但它表示“不是GROUP BY表达式”。我不想修改查询只是删除重复的参数(FOLIO,TARJETA,CUENTA和IMPORTE)。

1)--Declare namespace and call the java String class 
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:jString="http://www.oracle.com/XSL/Transform/java/java.lang.String"> 

 2)--Created a template to search for tag inputs that have an ampersand: 
 <xsl:template name="string-replace-all"> 
    <xsl:param name="text" /> 
    <xsl:choose> 
       <xsl:when test="contains($text, '&')"> 
          <xsl:variable name="str1" select="jString:new($text)"/> 
             <xsl:value-of select="jString:replace($str1,'&','&amp;')" /> 
       <xsl:otherwise> 
          <xsl:value-of select="$text" /> 
      </xsl:otherwise> 
    </xsl:choose> 
 </xsl:template> 

 3)--Call the template in the specific tags 
 <Nm> 
    <xsl:variable name="suppNm"> 
       <xsl:call-template name="string-replace-all"> 
          <xsl:with-param name="text" select="Payee/Name" /> 
       </xsl:call-template> 
    </xsl:variable> 
    <xsl:value-of select="$suppNm" /> 
 </Nm> 

1 个答案:

答案 0 :(得分:1)

在您的情况下,您不希望获得重复的结果,因此您最好的选择是DISTINCT。

DISTINCT和GROUP BY至少没有区别(Oracle风格):

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32961403234212

Normaly GROUP BY用于MAX,MIN等聚合函数。区别只是删除重复。

SQL Server检测您是否没有聚合函数并生成执行计划,就像您只是使用“Distinct”一样。真的没有什么大不同。

因此,使用DISTINCT,您可以使用正确的概念。 希望这会有所帮助。