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

    [SQL SERVER] problema select top ma anche distinct

    Salve a tutti ecco la mia select:
    codice:
    "SELECT TOP " & wnumerorecord & " dbo.MENU.tipo, dbo.PRODOTTO.codiceprodotto, dbo.PRODOTTO_VAR.immaginegrande1, dbo.PRODOTTO_VAR.immaginepiccola1, dbo.PRODOTTO_VAR.immaginegrande2, dbo.PRODOTTO_VAR.immaginepiccola2, dbo.PRODOTTO_VAR.immaginegrande3, dbo.PRODOTTO_VAR.immaginepiccola3, dbo.PRODOTTO_VAR.immagineprincipale, dbo.PRODOTTO_DES.ID_prodotto, dbo.PRODOTTO_DES.flg_novita, dbo.PRODOTTO_DES.nome, dbo.PRODOTTO_DES.descrizione, dbo.PRODOTTO_DES.descrizione2, dbo.PRODOTTO_DES.note2, dbo.PRODOTTO_DES.note, dbo.CATEGORIA_DES.descrizione AS paginalink FROM dbo.PRODOTTO INNER JOIN dbo.PRODOTTO_DES ON dbo.PRODOTTO_DES.ID_prodotto = dbo.PRODOTTO.ID_prodotto " & cat & " JOIN dbo.CATEGORIA_DES ON dbo.PRODOTTO.ID_categoria = dbo.CATEGORIA_DES.ID_CATEGORIA INNER JOIN dbo.PRODOTTO_VAR ON dbo.PRODOTTO_VAR.ID_prodotto = dbo.PRODOTTO.ID_prodotto INNER JOIN dbo.PRODOTTO_MENU ON dbo.PRODOTTO_MENU.ID_prodotto = dbo.PRODOTTO.ID_prodotto INNER JOIN dbo.MENU ON dbo.MENU.ID_menu = dbo.PRODOTTO_MENU.ID_menu WHERE " & wricerca & wricerca_menu & wnovita & " dbo.PRODOTTO.flg_disp='S' GROUP BY dbo.MENU.tipo, dbo.PRODOTTO.codiceprodotto, dbo.PRODOTTO_VAR.immaginegrande1, dbo.PRODOTTO_VAR.immaginepiccola1, dbo.PRODOTTO_VAR.immaginegrande2, dbo.PRODOTTO_VAR.immaginepiccola2, dbo.PRODOTTO_VAR.immaginegrande3, dbo.PRODOTTO_VAR.immaginepiccola3, dbo.PRODOTTO_VAR.immagineprincipale, dbo.PRODOTTO_DES.ID_prodotto, dbo.PRODOTTO_DES.flg_novita, dbo.PRODOTTO_DES.nome, dbo.PRODOTTO_DES.descrizione, dbo.PRODOTTO_DES.descrizione2, dbo.PRODOTTO_DES.note2, dbo.PRODOTTO_DES.note, dbo.CATEGORIA_DES.descrizione " & Order
    questa select funziona benissimo solo che a volte in base ovviamente a come sono caricati i dati nel database mi tira fuori giustamente dei prodotti doppi.
    Io vorrei fare una DISTINCT in base al campo dbo.PRODOTTO.ID_prodotto in modo tale che se la select tira fuori 2 o più ID_prodotto uguali viene visualizzato uno solo.
    Ho provato a scriverci DISTINCT accanto a TOP ma dà errore ho provato a scrivere SELECT DISTINCT dbo.PRODOTTO.ID_prodotto FROM (SELECT....) ma mi dà errore ....
    come posso risolvere?
    grazie a tutti

  2. #2
    scusa la sintassi

    select distinct top N colonna1,Colonna2 ..ColonnaN from Tabella

    è accettata e funzionante (almeno con Sql Server 2005 e 2008).

  3. #3
    inoltre analizzando bene la tua query visto che usi già group by puoi inserire la clausola HAVING per filtrare i doppioni.

    oppure puoi usare questa sintassi
    with TableTmp(Colonna1,Colonna2,Colonna3)
    as
    (
    select distinct Colonna1,Colonna2,Colonna3 from Tabella where Colonna1 = valore
    )
    select top N * from TableTmp

  4. #4
    Purtroppo se uso la distinct top mi viene restituito un errore.
    Dopo diverse prove ho scoperto, e qua chiedo a te sicuramente più esperto, che se tolgo dalla mia estrazione SELECT i campi di tipo Memo l'errore non c'è e funziona tutto, appena inserisco un campo memo nella SELECT appare l'errore cioè:

    SELECT DISTINCT TOP uno, due, tre etc etc ------> OK
    SELECT DISTINCT TOP uno, due, tre, quattro_memo ---------> ERRORE

    come mai?

    seconda domanda puoi spiegarmi meglio il discorso della with TableTmp ?
    fa parte della estrazione della select o va dentro la clausola where ?
    non ho capito l'esempio che mi fa che però mi sembra molto interessante

    ciao e grazie

  5. #5
    dunque:
    - nella "select top" hai messo il numero di righe che ti servono:
    tipo "select top 10 col1, col2 from table"

    - with tabletmp
    Il costrutto WITH (che vuol dire CON) prevede di rendere disponibili i dati di una query per un'altra query:

    WITH <NomeRisultatoQuery>(collonna1, colonna2,...)
    {
    select colonna1, colonna2, from table1 join table2 ...eccc where ...
    }
    select * from <NomeRisultatoQuery>

    E' "uguale" a creare una tabella in cui inserire i dati di una query e poi usarla per un'altra query.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.