Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-05-2010, 10:30   #1
MaxDembo81
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
lasciando perdere il fatto che ho messo le date tutte uguali e il codice uguale vorrei una query che, dati come parametri il codice ed eventualemnte mese/giorno, mi restituisse un riga del tipo:

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 10:33.
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 12:50   #2
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
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
eventualmente rimuovi il commentato
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 14:31   #3
kk3z
Senior Member
 
L'Avatar di kk3z
 
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 14:34.
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 14:34   #4
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
è TSQL valido? o.O
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 17:27   #5
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
Boh? Non ho sql server
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 18:23   #6
lupoxxx87
Senior Member
 
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
ai rigori dell'sql standard
direi di no
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 19:43   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
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
Ma anche SUM va bene.
__________________
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 23:32   #8
MaxDembo81
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?
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2010, 08:10   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Sintax error in:
Quote:
Originariamente inviato da MaxDembo81 Guarda i messaggi
La versione di Krazalizek funziona.
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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2010, 12:31   #10
MaxDembo81
Member
 
Iscritto dal: May 2010
Messaggi: 161
Kralizek
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2010, 19:26   #11
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2010, 20:19   #12
MaxDembo81
Member
 
Iscritto dal: May 2010
Messaggi: 161
a parte il lapsus mi sapete aiutare?
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2010, 20:26   #13
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da MaxDembo81 Guarda i messaggi
a parte il lapsus mi sapete aiutare?
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2010, 11:50   #14
MaxDembo81
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
fino a qua funziona.
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."

MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2010, 15:27   #15
kk3z
Senior Member
 
L'Avatar di kk3z
 
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
è uguale a
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
non capisco perchè una non è sql standard mentre l'altra si :mah:
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2010, 15:38   #16
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
perchè IF non è supportato in quella posizione.
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2010, 15:44   #17
MaxDembo81
Member
 
Iscritto dal: May 2010
Messaggi: 161
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Dopo 23 anni di silenzio, Warcraft 3 spi...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:34.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v