Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Rimuovere riga da select MSSQL

    Ciao a tutti
    Il mio problema é il seguente:

    Ho questa tabella

    http://i53.tinypic.com/iznb07.jpg

    Ottenuta tramite la seguente query

    codice:
    (select distinct [fortest].[dbo].[cliente].codcli as CODCLI,  
    [fortest].[dbo].[cliente].ragionesociale as RAGIONESOCIALE,
    [fortest].[dbo].[cliente].sedeamministrativa_provincia as PROVINCIA, 
    (SELECT [FORTEST].[dbo].[AGENTE].COGNOME FROM [FORTEST].[dbo].[AGENTE] WHERE [FORTEST].[dbo].[CLIENTE].IDAGENTE1=[FORTEST].[dbo].[AGENTE].IDAGENTE) as AGENTE1, 
    (SELECT [FORTEST].[dbo].[AGENTE].COGNOME FROM [FORTEST].[dbo].[AGENTE] WHERE [FORTEST].[dbo].[CLIENTE].IDAGENTE2=[FORTEST].[dbo].[AGENTE].IDAGENTE) as AGENTE2, 
    [fortest].[dbo].[tabeventi].id_trattativa as ID_TRATTATIVA, 
    [fortest].[dbo].[tabtrattative].desc_trattativa as DESC_TRATTATIVA, 
    [fortest].[dbo].[tabeventi].COMANDO,
    [fortest].[dbo].[tabtrattative].stato as STATO, 
    [fortest].[dbo].[tabeventi].id_evento     
    
    FROM [fortest].[dbo].[tabeventi],[fortest].[dbo].[tabtrattative], [fortest].[dbo].[cliente]    
    
     WHERE ([FORTEST].[dbo].[CLIENTE].CODCLI = [FORTEST].[dbo].[TABTRATTATIVE].ID_CLIENTE)   
    AND [fortest].[dbo].[tabeventi].id_trattativa = [fortest].[dbo].[tabtrattative].id_trattativa    
    AND [fortest].[dbo].[tabeventi].sort_data =  (select max([fortest].[dbo].[tabeventi].sort_data)   from [fortest].[dbo].[tabeventi]  where [fortest].[dbo].[tabeventi].id_trattativa=[fortest].[dbo].[tabtrattative].id_trattativa )

    Nei casi di trattative duplicate (ID_TRATTATIVA) devo tenere solo la riga che ha ID_EVENTO piu' alto.

    Esempio:
    2441 AMG SRL RE Pizzi NULL 48 Trattativa 1 OFFERTA NULL 3
    2441 AMG SRL RE Pizzi NULL 48 Trattativa 1 POST OFFERTA NULL 4

    Dovrò cancellare la riga che ha id_evento=3
    Ovviamente dentro il mio codice non posso inserire clausole WHERE diciamo "mirate" come ad esempio un WHERE id_evento <> '3' , sarebbe troppo facile

    Ci sto sbattendo la testa da un pò su questa cosa
    Credo che la soluzione sia abbastanza banale ma non riesco a trovarla

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Vedi se questo esempio ti è d'aiuto

    codice:
    create table #prova (
    trattativa int,
    evento int)
    
    insert into #prova 
    values
    (1,5),
    (2,3),
    (2,1),
    (1,4),
    (3,1)
    
    select trattativa,evento from (
    select 
    trattativa,evento,
    row_number() over(partition by trattativa order by evento desc) as 'rownum'
    from #prova ) as t
    where rownum = 1

  3. #3
    mmm... adesso me la studio e la provo
    ci sono sitruzioni tipo "over" e "partition" che non conosco

    al momento stavo provando una cosa dele genere:

    codice:
    (select id_trattativa as TRATTATIVA,sort_Data,count(*)
    from(......
    ....
    LA QUERY DI PRIMA
    ....
    ....
    )
    group by id_trattativa,sort_Data
    having count(*)>1)
    che mi da una tabellina del genere
    http://i51.tinypic.com/mvss5u.png

    in pratica sono tutte le trattative duplicate
    dovrei fare un match con la tabella di prima e tenere solo le righe che hanno id_evento maggiore (tra le sole righe che matchano)

    alla fine credo che sia quello che fa il tuo codice se non sbaglio
    provo e vediamo che succede

  4. #4
    fa proprio quello che cercavo
    ti ringrazio infinitamente nicola
    a buon rendere

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Prego. Già che ci sei dai anche uno sguardo alle cte

    http://msdn.microsoft.com/en-us/library/ms175972.aspx

    con le quali il mio esempio sarebbe diventato:

    codice:
    with mycte as 
    (
    select 
    trattativa,evento,
    row_number() over(partition by trattativa order by evento desc) as 'rownum'
    from #prova 
    ) 
    select trattativa,evento from mycte where rownum = 1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.