[RESOLVIDO][IREPORTS]Limitar numero de registros no detail em 10 usando SQL SERVER

2 respostas
T

Opa pessoal… estou com um prob. Preciso mostrar os 10 sites mais acessados para cada usuario.
Estou usando Ireports e SQL SERVER.

meu select está deste modo

SELECT tb.usr
, tb.dstname
, COUNT(tb.dstname) count
, ROW_NUMBER() OVER (ORDER BY COUNT(tb.dstname) DESC) AS ‘RowNumber’
FROM [rawsyslogdb_20081113].[dbo].[sw_0006B1308FF8] tb
WHERE tb.[USR] like ‘%’+ $P{P_USU} +’%'
AND tb.dstname not like ‘%mail%’ --Exclui emails
AND tb.msg is null --Apenas sites acessados… sem conexoes de informação.
GROUP BY tb.usr
, tb.dstname
ORDER BY tb.usr
,COUNT(tb.dstname) desc
,tb.DSTNAME

Problema é que ao contrario do oracle aqui não consigo usar o AND RowNumber < 11. Diz “Nome de coluna ‘RowNumber’ inválido.”

Então estou com 2 ideias para resolver… em ambas estou preso.

  1. Conseguir colocar o AND RowNumber < 11 na query

  2. Usar formatação condicional para que não imprima os sites que forem da linha 11 para cima…

Alguém tem alguma ideia de como resolver uma das duas possibilidades acima???

Vlw pessoal…

2 Respostas

T

Qual é a versão do MS SQL Server que você está usando? O “Row_number” só funciona com SQL Server 2005 ou 2008.

T
Opa consegui indo pela opcao 1 Não sei pq mas precisa que esteja dentro de um bloco para funcionar....
Select * from (
SELECT tb.usr 
     , tb.dstname
     , COUNT(tb.dstname) count
     , ROW_NUMBER() OVER (ORDER BY COUNT(tb.dstname) DESC) AS 'RowNumber'
  FROM [rawsyslogdb_20081113].[dbo].[sw_0006B1308FF8] tb
WHERE tb.[USR]  =  $P{P_USU}
    AND tb.dstname not like '10.0%'  --Exclui os servidores
    AND tb.dstname not like '%mail%' --Exclui emails
    AND tb.dstname not IN ('74.52.208.234','69.64.46.2','74.52.150.42')--Desconhecido
    AND tb.msg is  null --Apenas sites acessados.. sem conexoes de informação.
    
 GROUP BY tb.usr 
        , tb.dstname) tab
where tab.RowNumber < 11

O problema agora subiu de nivel....
Tem como dentro do REPORT eu usar um parametro ou variavel para mudar dinamicamente o nome da tabela que será usada na query?
O programa que grava os acessos cria 1 tabela por dia.
Tentei concatenar mas da erro....

Eu tenho o select que pega no formato que desejo.. falta soh conseguir colocar dentro do ireports...

select '20' + CONVERT(VARCHAR(16),GETDATE(), 12) dat

Caso alguem possa me ajudar agradeço.
Vlw pessoal.

Criado 13 de novembro de 2008
Ultima resposta 13 de nov. de 2008
Respostas 2
Participantes 2