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

    Identificazione cliente effettivo tramite l'importo delle fatture associate alle proprie commesse

    Buonasera,

    Ho bisogno di un aiuto per risolvere un problema in SQL.
    Premetto che ho iniziato da poco questo linguaggio di programmazione.
    In sostanza, nella mia tabella delle commesse ho 3 campi che mi indicano gli importi delle fatture associate a quella commessa. Se gli importi delle fatture sono > 0 allora questa commessa è fatturata e di conseguenza il cliente è attivo.
    Dopo aver ottenuto questa identificazione sulle commesse, nella mia tabella ricavata dalla query che riporto sotto, ho tante righe quante sono associate alle commesse. Il mio obiettivo è avere un raggruppamento solo per cliente con l'identificativo di cliente effettivo SI/NO.
    Per me un cliente è effettivo se almeno ha una commessa con identificativo SI.
    Riuscite a darmi una mano? non so se mi sono spiegato ma con gli esempi sotto dovrebbe essere più capibile. Vi ringrazio.

    codice:
    • SELECT Cliente,* FROM(
    • SELECT
    • CASE
    • WHEN (ISNULL(Importo1Fattura, -1) = -1 AND ISNULL(Importo2Fattura, -1) = -1 AND ISNULL(Importo3Fattura, -1) = -1) THEN 'ClienteNO'
    • ELSE 'ClienteSI'
    • END 'RapportoCliente',
    • AnaCommesseInter.IdCliente,
    • AnaClienti.CLRAGSOC as Cliente
    • FROM AnaCommesseInter
    • LEFT JOIN AnaClienti ON AnaClienti.IdCliente = AnaCommesseInter.IdCliente) as x
    Risultato Query
    Cliente RapportoCliente IdCliente
    + WATT S.R.L. ClienteNO 138493
    + WATT S.R.L. ClienteSI 138493
    + WATT S.R.L. ClienteSI 138493
    + WATT S.R.L. ClienteSI 138493
    + WATT S.R.L. ClienteNO 138493
    + WATT S.R.L. ClienteSI 138493
    + WATT S.R.L. ClienteSI 138493
    + WATT S.R.L. ClienteNO 138493
    + WATT S.R.L. ClienteSI 138493
    10 DICEMBRE SRL ClienteNO 438539
    10 DICEMBRE SRL ClienteNO 438539
    1701 SRL ClienteSI 314746
    2 EFFE ENGINEERING SRL ClienteNO 25136
    2 EFFE ENGINEERING SRL ClienteNO 25136
    Obiettivo
    Cliente RapportoCliente IdCliente
    + WATT S.R.L. ClienteSI 138493
    10 DICEMBRE SRL ClienteNO 438539
    1701 SRL ClienteSI 314746
    2 EFFE ENGINEERING SRL ClienteNO 25136

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Non specifichi di che database stai parlando e...

    Premetto che ho iniziato da poco questo linguaggio di programmazione
    un RDBMS non è un linguaggio di programmazione

  3. #3
    puoi provare con SELECT DISTINCT. E tranquillo, SQL è un linguaggio (non di programmazione ma di interrogazione, ma sempre linguaggio è ). Però devi comunque indicare quale db stai usando (come da regolamento )

  4. #4
    indicare in db intendete il programma? io sto utilizzando Microsoft SQL Management Studio.

    Riguardo la soluzione del SELECT DISTINCT non è sufficiente perchè in questo modo ho ancora le due casistiche separate per + WATT S.R.L. (sia ClienteSI che ClienteNO) ... io ho bisogno di una singola riga per cliente (se è presente almeno un record ClienteSI allora il cliente è effettivo, altrimenti no).

  5. #5
    codice:
    SELECT 
       Cliente, MAX(RapportoCliente), MAX(IdCliente) 
    FROM (  
       SELECT
          CASE WHEN (ISNULL(Importo1Fattura, -1) = -1 AND ISNULL(Importo2Fattura, -1) = -1 AND ISNULL(Importo3Fattura, -1) = -1) THEN 'ClienteNO'  
               ELSE 'ClienteSI'  
               END AS RapportoCliente,  
          AnaCommesseInter.IdCliente AS IdCliente,  
          AnaClienti.CLRAGSOC AS Cliente  
       FROM 
          AnaCommesseInter  
          LEFT JOIN AnaClienti ON AnaClienti.IdCliente = AnaCommesseInter.IdCliente) AS X
    GROUP BY
       Cliente
    per capire cosa si intende per db basta leggere il regolamento
    .
    .
    .
    .
    .
    .
    .
    .
    no, scusate, ma davvero bisogna leggere il regolamento per sapere cosa rispondere quando viene chiesto di indicare il db?




  6. #6
    Ciao optime,
    riguardo la tua query mi puoi piegare come mai hai deciso di utilizzare MAX? più che altro come fa a capire, tra ClienteSI e ClienteNO, quale è il valore corretto da tener conto (o meglio il valore massimo)?
    Ho fatto girare la tua query nel mio sistema, ma per esempio il cliente riportato sopra (+ WATT S.R.L.) non viene più mostrato nel risultato finale. Non so se il risultato finale è corretto.

    beh non capisco perchè serva indicare il nome del db (comunque se lo volete si chiama Cliente) quindi ho presupposto il nome del programma utilizzato ...

  7. #7
    MAX perché ClienteSI è "più grande" di ClienteNO

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    beh non capisco perchè serva indicare il nome del db (comunque se lo volete si chiama Cliente) quindi ho presupposto il nome del programma utilizzato ...
    Se è un troll è geniale...
    se non lo è...

Tag per questa discussione

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