|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2010
Messaggi: 161
|
[SQL] Query impossibile?
Salve ho una tabella formata dai seguenti dati
Chiave,Codice, Stato, Motivo_annullamento, Data_creazione, Data_inzio, Data_fine e altri campi non importanti i record sono del tipo: Codice:
1, TO000000000JH , 'CL', ' ', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 2, TO000000000JH , 'AB', ' ', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 3, TO000000000JH , 'CL', 'TEC', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 4, TO000000000JH , 'CL', ' ', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 5, TO000000000JH , 'AB', ' ', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 6, TO000000000JH , 'CL', 'PER', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 7, TO000000000JH , 'CL', 'PER', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 8, TO000000000JH , 'CL', ' ', 01/01/2010 10.00, 01/01/2010 10.02, 01/01/2010 10.04 Codice, Count(*), Count(CL) con motivo_annullamento = ' ', Count(AB), Count(Motivo_Annullamento='TEC'), COunt(Motivo_annullamento='PER') Dunque nel nostro caso: TO000000000JH, 8, 3, 2, 1, 2 Che alla fine mi sta a significare che quel codice ha ricevuto 8 chiamate, 3 chiuse in modo corretto, 2 "abortite", 1 annullata con motivo TEC e 2 annullate con motivo PER. Un riepilogo insomma! E' possibile farlo con sql server? Grazie Ultima modifica di MaxDembo81 : 12-05-2010 alle 11:33. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
prova qualcosa tipo...
Codice:
SELECT
Codice,
COUNT(*),
(SELECT COUNT(*) FROM Tabella T2 WHERE T2.Codice = T1.Codice AND T2.Stato='AB') AS X0,
(SELECT COUNT(*) FROM Tabella T2 WHERE T2.Codice = T1.Codice AND T2.Stato='CL' AND T2.Motivo_annullamento = '') AS X1,
(SELECT COUNT(*) FROM Tabella T2 WHERE T2.Codice = T1.Codice AND T2.Stato='CL' AND T2.Motivo_annullamento = 'TEC') AS X2
(SELECT COUNT(*) FROM Tabella T2 WHERE T2.Codice = T1.Codice AND T2.Stato='CL' AND T2.Motivo_annullamento = 'PER') AS X3
FROM
Tabella T1
--WHERE
-- Codice = @Codice
GROUP BY
Codice
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
COUNT(IF()) si può usare?
Codice:
SELECT
Codice, COUNT(*) count1,
COUNT(IF(Stato='AB', 1,NULL)) count2,
COUNT(IF(Motivo_annullamento = '', 1,NULL)) count3,
COUNT(IF(Motivo_annullamento = 'TEC', 1,NULL)) count4,
COUNT(IF(Motivo_annullamento = 'PER', 1,NULL)) count5
FROM
Tabella
ecc ecc
Ultima modifica di kk3z : 12-05-2010 alle 15:34. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
è TSQL valido? o.O
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Boh? Non ho sql server
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
ai rigori dell'sql standard
direi di no |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
poiche' COUNT come funzione di gruppo conta solo le righe diverse da NULL, direi che potrebbe andare
Codice:
SELECT
Codice, COUNT(*) count1,
COUNT( CASE WHEN Stato='AB' THEN 1 ELSE NULL END) count2,
COUNT( CASE WHEN Motivo_annullamento = '' THEN 1 ELSE NULL END) count3,
COUNT( CASE WHEN Motivo_annullamento = 'TEC' THEN 1 ELSE NULL END) count4,
COUNT(CASE WHEN Motivo_annullamento = 'PER' THEN 1 ELSE NULL END) count5
FROM
Tabella
ecc ecc
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: May 2010
Messaggi: 161
|
La versione di Krazalizek funziona.
Ora mi sorge un dubbio. Se io volessi restringere le date ad un determinato mese/giorno devo inserire la clausola (MONTH(Data_creazione='05')) anche nelle varie X0, X1, X2 (vedi esempio Krazalizek)? Perchè dalla prova veloce che ho fatto non mi tornano i risultati Domanda 2: e se io volessi fare un prova dicendo "fammi vedere tutti i mesi" come faccio? Perchè ho provato (MONTH(Data_creazione)='%') oppure a mettere in una stored procedure e passare NULL oppure con * ma non funziona. Si può fare? |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Sintax error in:
Unknown identifier: 'Krazalizek'
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: May 2010
Messaggi: 161
|
Kralizek
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: May 2010
Messaggi: 161
|
a parte il lapsus mi sapete aiutare?
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Prova la mia, con la WHERE che ti serve.
Ricordati il GROUP BY
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: May 2010
Messaggi: 161
|
ok ho provato anche la tua gugo ma sono punto e a capo.
fai conto che la stia modificando Codice:
ALTER PROCEDURE [dbo].[spStatistiche](@Centro as NVARCHAR(6), @Codice as NVARCHAR(15), @Mese as nchar(2)) . . . . . . WHERE (Codice= @Codice) and (Centro=@Centro) and (MONTH(Data_creazione)=@Mese) poi la eseguo Codice:
USE [DBPROVA] GO DECLARE @return_value int EXEC @return_value = [dbo].[spStatistiche] @Centro = N'TS', @Codice = N'To000000000JH', @Mese='04' GO Ma rimane il problema che se voglio avere Mese=% ovvero tutte quelle di tutti i mesi mi da errore "Messaggio 245, livello 16, stato 1, procedura spStatistiche, riga 18 Conversion failed when converting the nvarchar value '% ' to data type int."
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Codice:
SELECT
Codice, COUNT(*) count1,
COUNT(IF(Stato='AB', 1,NULL)) count2,
COUNT(IF(Motivo_annullamento = '', 1,NULL)) count3,
COUNT(IF(Motivo_annullamento = 'TEC', 1,NULL)) count4,
COUNT(IF(Motivo_annullamento = 'PER', 1,NULL)) count5
FROM
Tabella
ecc ecc
Codice:
SELECT
Codice, COUNT(*) count1,
COUNT( CASE WHEN Stato='AB' THEN 1 ELSE NULL END) count2,
COUNT( CASE WHEN Motivo_annullamento = '' THEN 1 ELSE NULL END) count3,
COUNT( CASE WHEN Motivo_annullamento = 'TEC' THEN 1 ELSE NULL END) count4,
COUNT(CASE WHEN Motivo_annullamento = 'PER' THEN 1 ELSE NULL END) count5
FROM
Tabella
ecc ecc
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
perchè IF non è supportato in quella posizione.
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: May 2010
Messaggi: 161
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:00.




















