我有一个查询,它给出了以下结果
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关键字?
由于
答案 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;
答案 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。