Visualizzazione dei risultati da 1 a 6 su 6

Discussione: ricerca su uncampo

  1. #1

    ricerca su uncampo

    ciao a tutti

    ho un problema e volevo verificare con voi se esiste una soluzione migliore di quella che ho pensato io.
    Ho un database con una ventina di campi data. Questi campi data servono per tenere una sorta di storico, quindi non sono tutti necessariamente compilati.
    Io devo fare una ricerca che è vincolata solo dall'ultimo campo data compilato. la soluzione che propongo io è la seguente: noterete che è decisamente macchinosa.

    select * from database
    where (data1 > 'vincolo ricerca' and data2 is null) or (data2 > 'vincolo ricerca' and data3 is null) or or (data3 > 'vincolo ricerca' and data4 is null) or (data4 > 'vincolo ricerca' and data5 is null) or (data5 > 'vincolo ricerca' and data6 is null) or (data6 > 'vincolo ricerca' and data7 is null) or (data7 > 'vincolo ricerca' and data8 is null) or (data8 > 'vincolo ricerca' and data9 is null) or (data9 > 'vincolo ricerca' and data10 is null) ecc ecc così fino alla data 20.

    esiste un modo di evitare una roba del genere?

    grazie mille per l'attenzione!

  2. #2
    select * from database
    where
    coalesce(data20, data19, data18, data17, ...... (eccetera) , data1) > 'vincolo ricerca'

    prova questo (su sql server).

  3. #3
    grazie del consiglio

    funziona perfettamente!

  4. #4
    Ne sono contento.

    A titolo di info (va be che avrai gia visto l'SQL Book) coalesce è una funzione che restituisce il primo valore not null della -tupla.

  5. #5
    grazie per l'informazione

    coi tuoi consigli ho trasformato questa query

    SELECT *
    FROM dbo.supervisore
    WHERE (nomeazienda LIKE '%razienda%') and (esito LIKE '%resito%') and (datatelefonata > 'rdata') and (note LIKE '%rnote%') and (categorie LIKE '%rcategoria%') and ((data1 > 'rdataagente' and data2 is null) or (data2 > 'rdataagente' and data3 is null) or (data3 > 'rdataagente' and data4 is null) or (data4 > 'rdataagente' and data5 is null) or (data5 > 'rdataagente' and data6 is null) or (data6 > 'rdataagente' and data7 is null) or (data7 > 'rdataagente' and data8 is null) or (data8 > 'rdataagente' and data9 is null) or (data9 > 'rdataagente' and data10 is null) or (data10 > 'rdataagente' and data11 is null) or (data11 > 'rdataagente' and data12 is null) or (data12 > 'rdataagente' and data13 is null) or (data13 > 'rdataagente' and data14 is null) or (data14 > 'rdataagente' and data15 is null) or (data16 > 'rdataagente' and data17 is null) or (data17 > 'rdataagente' and data18 is null) or (data18 > 'rdataagente' and data19 is null) or (data19 > 'rdataagente' and data20 is null) or (data20 > 'rdataagente')) and ((esito1 LIKE '%resitoagente%' and esito2 = 'N / A') or (esito2 LIKE '%resitoagente%' and esito3 = 'N / A') or (esito3 LIKE '%resitoagente%' and esito4 = 'N / A') or (esito4 LIKE '%resitoagente%' and esito5 = 'N / A') or (esito5 LIKE '%resitoagente%' and esito6 = 'N / A') or (esito6 LIKE '%resitoagente%' and esito7 = 'N / A') or (esito7 LIKE '%resitoagente%' and esito8 = 'N / A') or (esito8 LIKE '%resitoagente%' and esito9 = 'N / A') or (esito9 LIKE '%resitoagente%' and esito10 = 'N / A') or (esito10 LIKE '%resitoagente%' and esito11 = 'N / A') or (esito11 LIKE '%resitoagente%' and esito12 = 'N / A') or (esito12 LIKE '%resitoagente%' and esito13 = 'N / A') or (esito13 LIKE '%resitoagente%' and esito14 = 'N / A') or (esito14 LIKE '%resitoagente%' and esito15 = 'N / A') or (esito16 LIKE '%resitoagente%' and esito17 = 'N / A') or (esito17 LIKE '%resitoagente%' and esito18 = 'N / A') or (esito18 LIKE '%resitoagente%' and esito19 = 'N / A') or (esito19 LIKE '%resitoagente%' and esito20 = 'N / A') or (esito20 LIKE '%resitoagente%')) and (note1 LIKE '%rnoteagente%' or note2 LIKE '%rnoteagente%' or note3 LIKE '%rnoteagente%' or note4 LIKE '%rnoteagente%' or note5 LIKE '%rnoteagente%' or note6 LIKE '%rnoteagente%' or note7 LIKE '%rnoteagente%' or note8 LIKE '%rnoteagente%' or note9 LIKE '%rnoteagente%' or note10 LIKE '%rnoteagente%' or note11 LIKE '%rnoteagente%' or note12 LIKE '%rnoteagente%' or note13 LIKE '%rnoteagente%' or note14 LIKE '%rnoteagente%' or note16 LIKE '%rnoteagente%' or note17 LIKE '%rnoteagente%' or note18 LIKE '%rnoteagente%' or note19 LIKE '%rnoteagente%' or note20 LIKE '%rnoteagente%')
    ORDER BY nomeazienda ASC

    in questa

    SELECT *
    FROM dbo.supervisore
    WHERE agentezona = 'ragente' and (nomeazienda LIKE '%razienda%') and (esito LIKE '%resito%') and (datatelefonata > 'rdata') and (note LIKE '%rnote%') and (categorie LIKE '%rcategoria%') and (ultimadata > 'rdataagente') and (ultimoesito LIKE '%resitoagente%')
    ORDER BY nomeazienda ASC

    modificando la view supervisore così


    SELECT telemark.*, telemark2.*, telemark3.*,
    cap.agente AS agentezona, COALESCE (data20, data19,
    data18, data17, data16, data15, data14, data13, data12,
    data11, data10, data9, data8, data7, data6, data5, data4, data3,
    data2, data1) AS ultimadata,
    'ultimoesito' = CASE WHEN esito20 <> 'N / A' THEN esito20 WHEN
    esito19 <> 'N / A' THEN esito19 WHEN esito18 <> 'N / A' THEN esito18
    WHEN esito17 <> 'N / A' THEN esito17 WHEN esito16 <> 'N / A'
    THEN esito16 WHEN esito15 <> 'N / A' THEN esito15 WHEN esito14
    <> 'N / A' THEN esito14 WHEN esito13 <> 'N / A' THEN esito13 WHEN
    esito12 <> 'N / A' THEN esito12 WHEN esito11 <> 'N / A' THEN esito11
    WHEN esito10 <> 'N / A' THEN esito10 WHEN esito9 <> 'N / A' THEN
    esito9 WHEN esito8 <> 'N / A' THEN esito8 WHEN esito7 <> 'N / A'
    THEN esito7 WHEN esito6 <> 'N / A' THEN esito6 WHEN esito5 <>
    'N / A' THEN esito5 WHEN esito4 <> 'N / A' THEN esito4 WHEN esito3
    <> 'N / A' THEN esito3 WHEN esito2 <> 'N / A' THEN esito2 WHEN
    esito1 <> 'N / A' THEN esito1 ELSE 'N / A' END
    FROM dbo.cap INNER JOIN
    dbo.telemark ON
    dbo.cap.CAP = dbo.telemark.CAP INNER JOIN
    dbo.telemark2 ON
    dbo.telemark.indice = dbo.telemark2.indice2 INNER JOIN
    dbo.telemark3 ON
    dbo.telemark2.indice2 = dbo.telemark3.indice3


    (ho anche imparato ad usare il case when :gren: )

  6. #6
    Bravissimo, pensavo di esser tra i pochi ad usarlo 'il case - when'.

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.