Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-05-2010, 11: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 11:33.
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 13: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, 15: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 15:34.
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2010, 15: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, 18: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, 19: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, 20: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 13-05-2010, 00: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, 09: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, 13: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, 20: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, 21: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, 21: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, 12: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, 16: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, 16: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, 16:44   #17
MaxDembo81
Member
 
Iscritto dal: May 2010
Messaggi: 161
MaxDembo81 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Funzionalità top a un prezzo acce...
Lo strumento per gli aggiornamenti autom...
Imperdibile sconto sul roborock Saros Z7...
Google Pixel 10, altri 100€ di sconto su...
Chip sotto i 2 nanometri, l'Europa alza ...
La smart meno smart di tutte: #6 in azio...
Red Hat Enterprise Linux sbarca su AWS E...
Addio alle migliaia di cicli e anni di t...
Colpo di STMicroelectronics, un'intesa d...
La Ferrari elettrica si chiama Luce: ecc...
Proseguono le riparazioni in vista del l...
Cinema domestico low cost: proiettore Fu...
Sharp porta a ISE 2026 i nuovi display i...
Casa più sicura senza lavori: Arl...
Batterie esauste, l'Italia raccoglie sol...
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: 01:00.


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