SQL结果组由2

时间:2014-10-14 10:09:11

标签: sql sql-server

我有一个查询,它给出了以下结果

FILE    EVENT   AMOUNT
File1   AP      26.96
File1   AP      26.96
File1   AP      26.96

关于如何将结果分组2以便我可以

的任何想法
FILE    EVENT   AMOUNT
File1   AP      26.96
File1   AP      26.96

如果我的原始查询返回4个结果,

FILE    EVENT   AMOUNT
File1   AP      26.96
File1   AP      26.96
File1   AP      26.96
File1   AP      26.96

我想

FILE    EVENT   AMOUNT
File1   AP      26.96
File1   AP      26.96

执行上述操作的任何SQL关键字?

由于

4 个答案:

答案 0 :(得分:6)

如果你想返回2行,那么我会看一下像row_number()这样的窗口函数。您可以对3列上的数据进行分区,然后将其过滤为仅返回2行:

select [file], [event], [amount]
from
(
  select [file], [event], [amount],
    rn = row_number() over(partition by [file], [event], [amount]
                           order by [file])
  from dbo.yourtable
) d
where rn <= 2;

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

试试这个......

;WITH    cteFiles
          AS ( SELECT   [FILE]
                       ,[EVENT]
                       ,[AMOUNT]
                       ,ROW_NUMBER() OVER ( PARTITION BY [FILE], [EVENT], [AMOUNT] 
                                                 ORDER BY [FILE] ) AS rownum
               FROM     files
             )
    SELECT  [FILE]
           ,[EVENT]
           ,[AMOUNT]
    FROM    cteFiles
    WHERE   rownum <= 2;

请参阅fiddle

答案 2 :(得分:-4)

哥们, 根据已定义列中的类似值对行进行分组。 在您的示例中,所有列值都相同,因此group by将返回1行。

如果你想要两行,你可以尝试rownum,如

选择x,y,z,其中rownum&lt; = 2;

答案 3 :(得分:-4)

您只需要两条记录,或者您需要一次只有两条记录?

如果您只需要两条记录,那么&#34; Top&#34;会有所帮助。

如果您一次需要两条记录,请使用以下内容: -

WITH AllRecords AS (
Select Row_Number() Over(order by File) as RowID,File,Event,Amount from table
)
Select 
File,Event,Amount
from AllRecords 
where RowID>=@startIndex and RowID<=@endIndex

例如: - @startIndex可能是1,3,5 ...... @endIndex可能是2,4,6 .... 这可以计算为: -

@startIndex=(pageNumber-1)*pageSize+1
@endIndex=pageNumber*pageSize

在您的情况下,页面大小为2。