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

    [sql]query complessa, forse UNION

    ciao a tutti dovrei ottenere, preferibilmente con un'unica query un risultato del genere:



    tralasciando ovviamente ciò che è in corsivo tra le quadre.

    Quello che sta nell'immagine lo ottengo con diverse query, ora lo vorrei con una sola query visto che devo esportare quel risultato in csv

    le tabelle a cui mi appoggio cono sostanzialmente 2
    1:
    codice:
    CREATE TABLE `cc_inbound` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `pubblicita` int(10) unsigned default NULL,
      `pubblicitas` int(10) unsigned default NULL,
      `appuntamento` char(2) NOT NULL default '',
      `tipoappuntamento` varchar(25) default NULL,
      PRIMARY KEY  (`id`)
    )
    e 2:
    codice:
    CREATE TABLE `fonte2` (
      `id` smallint(5) unsigned NOT NULL auto_increment,
      `fonte2` varchar(50) NOT NULL default '',
      `fonte1id` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id`)
    )
    dunque cerco di spiegarne in breve i campi della tabella cc_inbound:
    pubblicita è un campo che non interessa in questo frangente
    pubblicitas è la chiave esterna che mantiene il collegamento con l'id della tabella fonte2
    appuntamento è praticamente un flag che può contenere sì, no oppure NULL
    tipoappuntamento è pieno solo se appuntamento sarà sì, ovviamente. E può contenere telefonico, in filiale oppure NULL

    ora, io sto provando ad ottenere quella struttura che ho postato sopra, sto provando attraverso JOIN, UNION e compagnia varia, ma non ottengo nulla di conforntante

    voi mi sapete dare una mano? o dite che devo abbandonare definitivamente l'idea di farlo con una sola query?







    Vi ringrazio infinitamente per ogni tipo di aiuto!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    La colonna N.S. per cosa starebbe?

  3. #3
    N.S. sta per appuntamento non specificato, praticamente quella colonna contiene il totale delle righe in cui appuntamento è pari a NULL





    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Dovresti essere un po' più chiaro. Qual è la differenza con la colonna No app.?

  5. #5
    dunque, la colonna No app. è la somma dei record che hanno la colonna appuntamento pari a no, mentre N.S. è la somma dei record che hanno la colonna appuntamento pari a NULL. Mentre se quella è pari a sì mi si presenta uno dei casi in figura
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Sarà dura che la colonna appuntamento sia null, visto che l'hai definita not null.

    codice:
    SELECT f.fonte2, count( * ) AS totale, count(CASE WHEN appuntamento = 'si' AND tipoappuntamento = 'filiale' THEN 1 ELSE NULL END ) AS filiale, 
    count(CASE WHEN appuntamento = 'si' AND tipoappuntamento  'telefonico'
    THEN 1 ELSE NULL END ) AS telefonico, 
    count(CASE WHEN appuntamento = 'no' THEN 1 ELSE NULL END ) AS `no app.` , 
    count( CASE WHEN appuntamento = '' THEN 1 ELSE NULL END ) AS `n.s.` 
    FROM cc_inbound c
    LEFT JOIN fonte2 f ON c.pubblicitas = f.id

  7. #7
    si si scusa! mi sono espresso male io! la colonna in effetti al massimo può essere vuota, non nulla.

    Rispondo solo ora perchè ho avuto problemi con l'adsl e sono stato offline fino ad ora

    comunque la query è a dir poco perfetta! ho aggiunto il group by perché senza mi dava errore. La versione definitiva è questa:

    codice:
    SELECT f.fonte2, count( * ) AS totale, count(
    CASE WHEN appuntamento LIKE 'si'
    AND tipoappuntamento LIKE 'in filiale'
    THEN 1
    ELSE NULL
    END ) AS filiale, count(
    CASE WHEN appuntamento LIKE 'si'
    AND tipoappuntamento LIKE 'telefonico'
    THEN 1
    ELSE NULL
    END ) AS telefonico, count(
    CASE WHEN appuntamento LIKE 'no'
    THEN 1
    ELSE NULL
    END ) AS `no app.` , count(
    CASE WHEN appuntamento LIKE ''
    THEN 1
    ELSE NULL
    END ) AS `n.s.`
    FROM cc_inbound c
    LEFT JOIN fonte2 f ON c.pubblicitas = f.id
    GROUP BY fonte2


    Grazie mille per l'importantissimo aiuto!
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da 13manuel84
    ho aggiunto il group by perché senza mi dava errore.
    mi era rimasto nel copia-incolla...

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.