Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [SQL] group by e charindex

    Ciao,
    ho una tabella che contiene dati del genere (ho messo solo un campo)

    lc_codart
    10010.0.20
    10010.0.30
    10010.0.40
    10020.0.20
    10020.0.25
    10020.0.30
    10030.1.25
    10030.1.30

    vorrei estrarre solo questi valori

    lc_codart
    10010
    10020
    10030

    La query che ho scritto è così
    codice:
    SELECT * FROM (SELECT LEFT(lc_codart,CHARINDEX('.',lc_codart+'.')-1) AS parz,lc_codart,ar_descr,lc_note,ROW_NUMBER() OVER (ORDER BY lc_codart) as ct FROM HH_EX_LISTINI WHERE (lc_note!='') group by LEFT(lc_codart,CHARINDEX('.',lc_codart+'.')-1),lc_codart,ar_descr,lc_note) SUB WHERE ct >=0 AND ct<=40;
    i dati vengono estratti correttamente, ma non esegue il raggruppamento, dove sbaglio?

    grazie.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Che cosa ottieni ? Se usi il group by ci vuole una funzione di gruppo nella clausola select.

    Esempio : select campo1, count(*) from tabella group by campo1 order by campo1

    Forse nel tuo caso un distinct basterebbe.

    Esempio : select distinct campo1 from tabella order by campo1
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Questi sono i risultati
    codice:
    parziale        lc_note lc_codart       ct
    10010   LISTINO RACCORDI SERIE UNO      10010.0.20      1
    10010   LISTINO RACCORDI SERIE UNO      10010.0.25      2
    10010   LISTINO RACCORDI SERIE UNO      10010.0.32      3
    10020   LISTINO RACCORDI SERIE UNO      10020.0.20      4
    10020   LISTINO RACCORDI SERIE UNO      10020.0.25      5
    10020   LISTINO RACCORDI SERIE UNO      10020.0.32      6
    10040   LISTINO RACCORDI SERIE UNO      10040.0.20      7
    10040   LISTINO RACCORDI SERIE UNO      10040.0.25      8
    10040   LISTINO RACCORDI SERIE UNO      10040.0.32      9
    10050   LISTINO RACCORDI SERIE UNO      10050.0.20      10
    10050   LISTINO RACCORDI SERIE UNO      10050.0.25      11
    10050   LISTINO RACCORDI SERIE UNO      10050.0.32      12
    10120   LISTINO RACCORDI SERIE UNO      10120.0.20      13
    10120   LISTINO RACCORDI SERIE UNO      10120.0.25      14
    10120   LISTINO RACCORDI SERIE UNO      10120.0.32      15
    10850   LISTINO RACCORDI SERIE UNO      10850.0.20      16
    10850   LISTINO RACCORDI SERIE UNO      10850.0.25      17
    10850   LISTINO RACCORDI SERIE UNO      10850.0.32      18
    10990   LISTINO RACCORDI SERIE UNO      10990.0.20      19
    11016   PVCPR/05 DICEMBRE 10    11016.6.20      22
    11016   PVCPR/05 DICEMBRE 10    11016.6.25      23
    11016   PVCPR/05 DICEMBRE 10    11016.6.32      28
    11016   PVCPR/05 DICEMBRE 10    11016.6.40      30
    11016   PVCPR/05 DICEMBRE 10    11016.6.50      32
    11016   PVCPR/05 DICEMBRE 10    11016.6.63      36
    11016   PVCPR/06 01/2012        11016.6.20      20
    11016   PVCPR/06 01/2012        11016.6.25      25
    11016   PVCPR/06 01/2012        11016.6.32      26
    11016   PVCPR/06 01/2012        11016.6.40      29
    11016   PVCPR/06 01/2012        11016.6.50      33
    11016   PVCPR/06 01/2012        11016.6.63      35
    11016   PVCPR/07 12/2016        11016.6.20      21
    11016   PVCPR/07 12/2016        11016.6.25      24
    11016   PVCPR/07 12/2016        11016.6.32      27
    11016   PVCPR/07 12/2016        11016.6.40      31
    11016   PVCPR/07 12/2016        11016.6.50      34
    11016   PVCPR/07 12/2016        11016.6.63      37
    111     PVCED/06 SETTEMBRE 10   111.1.100       39
    111     PVCED/07 01/2012        111.1.100       40
    111     PVCED/08 04/2013        111.1.100       38
    come vedi i record 10010.x.xx, 10020.x.xx ecc vengono estratti più volte, io vorrei che tutti quelli che hanno la prima parte del campo lc_codart fino al punto vengono estratti uno soltanto

  4. #4
    codart è sempre fatto da 5 digit - punto - 1 digit - punto - 2 digit?

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    @jeck

    Non si sà quello che vuoi ottenere.

    Se vuoi

    codice:
    10010   LISTINO RACCORDI SERIE UNO
    10020   LISTINO RACCORDI SERIE UNO
    10040   LISTINO RACCORDI SERIE UNO 
    etc...
    codice:
    SELECT distinct LEFT(lc_codart,CHARINDEX('.',lc_codart+'.')-1) AS parz, c_note
    FROM HH_EX_LISTINI
    Se vuoi

    codice:
    10010  
    10020  
    10040 
    etc...
    codice:
    SELECT distinct LEFT(lc_codart,CHARINDEX('.',lc_codart+'.')-1) AS parz
    FROM HH_EX_LISTINI
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    questi sono i risultati
    codice:
    parziale        lc_note lc_codart       ct
    10010   LISTINO RACCORDI SERIE UNO      10010.0.20      1
    10010   LISTINO RACCORDI SERIE UNO      10010.0.25      2
    10010   LISTINO RACCORDI SERIE UNO      10010.0.32      3
    10020   LISTINO RACCORDI SERIE UNO      10020.0.20      4
    10020   LISTINO RACCORDI SERIE UNO      10020.0.25      5
    10020   LISTINO RACCORDI SERIE UNO      10020.0.32      6
    10040   LISTINO RACCORDI SERIE UNO      10040.0.20      7
    10040   LISTINO RACCORDI SERIE UNO      10040.0.25      8
    10040   LISTINO RACCORDI SERIE UNO      10040.0.32      9
    10050   LISTINO RACCORDI SERIE UNO      10050.0.20      10
    10050   LISTINO RACCORDI SERIE UNO      10050.0.25      11
    10050   LISTINO RACCORDI SERIE UNO      10050.0.32      12
    10120   LISTINO RACCORDI SERIE UNO      10120.0.20      13
    10120   LISTINO RACCORDI SERIE UNO      10120.0.25      14
    10120   LISTINO RACCORDI SERIE UNO      10120.0.32      15
    10850   LISTINO RACCORDI SERIE UNO      10850.0.20      16
    10850   LISTINO RACCORDI SERIE UNO      10850.0.25      17
    10850   LISTINO RACCORDI SERIE UNO      10850.0.32      18
    10990   LISTINO RACCORDI SERIE UNO      10990.0.20      19
    11016   PVCPR/05 DICEMBRE 10    11016.6.20      22
    11016   PVCPR/05 DICEMBRE 10    11016.6.25      23
    11016   PVCPR/05 DICEMBRE 10    11016.6.32      28
    11016   PVCPR/05 DICEMBRE 10    11016.6.40      30
    11016   PVCPR/05 DICEMBRE 10    11016.6.50      32
    11016   PVCPR/05 DICEMBRE 10    11016.6.63      36
    11016   PVCPR/06 01/2012        11016.6.20      20
    11016   PVCPR/06 01/2012        11016.6.25      25
    11016   PVCPR/06 01/2012        11016.6.32      26
    11016   PVCPR/06 01/2012        11016.6.40      29
    11016   PVCPR/06 01/2012        11016.6.50      33
    11016   PVCPR/06 01/2012        11016.6.63      35
    11016   PVCPR/07 12/2016        11016.6.20      21
    11016   PVCPR/07 12/2016        11016.6.25      24
    11016   PVCPR/07 12/2016        11016.6.32      27
    11016   PVCPR/07 12/2016        11016.6.40      31
    11016   PVCPR/07 12/2016        11016.6.50      34
    11016   PVCPR/07 12/2016        11016.6.63      37
    111     PVCED/06 SETTEMBRE 10   111.1.100       39
    111     PVCED/07 01/2012        111.1.100       40
    111     PVCED/08 04/2013        111.1.100       38
    E vorrei ottenere questo
    codice:
    parziale        lc_note 
    10010   LISTINO RACCORDI SERIE UNO
    10020   LISTINO RACCORDI SERIE UNO
    10040   LISTINO RACCORDI SERIE UNO
    10050   LISTINO RACCORDI SERIE UNO
    10120   LISTINO RACCORDI SERIE UNO
    10850   LISTINO RACCORDI SERIE UNO
    10990   LISTINO RACCORDI SERIE UNO
    11016   PVCPR/07 12/2016
    111     PVCED/08 04/2013

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai provato

    codice:
    SELECT distinct LEFT(lc_codart,CHARINDEX('.',lc_codart+'.')-1) AS parz, lc_note
    FROM HH_EX_LISTINI
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    se esguo la query come hai scritto tu, funziona, ma messa in questo modo per la paginazione, non funziona

    codice:
    SELECT * FROM (SELECT DISTINCT LEFT(lc_codart,CHARINDEX('.',lc_codart+'.')-1) AS parziale,lc_note,ROW_NUMBER() OVER
    (ORDER BY lc_codart) as ct
    FROM HH_EX_LISTINI WHERE (lc_note!='') ) SUB WHERE ct >=0 AND ct<=40;

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Informati sul significato di DISTINCT.

    Il row_number che usi rende tutti i record unici.

    Detto questo non capisco perché lo usi li. Dovresti usarlo nella prima select.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    per fare la paginazione dei reocrd, faccio prima un count degli elementi, e poi il limit. Ho trovato quel codice online.

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.