Stored con due campi counter

lunedì 06 maggio 2013 - 17.56

arena_luigi Profilo | Newbie

Ciao,
ho la seguente stored:

USE [DBFBA]
GO
/****** Object: StoredProcedure [dbo].[KPI] Script Date: 05/06/2013 17:17:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[KPI]
@Anno int,
@SetQuarter int
AS
BEGIN

/* Dichiarazione parametri input */
DECLARE @Year int,@Quarter tinyint;
DECLARE @StartRange datetime,@EndRange datetime;
DECLARE @OreIntervento as decimal (5,2);
DECLARE @MyCount as int;


SET @Year = @Anno;
SET @Quarter = @SetQuarter;
SET @StartRange = DATEADD(year,@Year - 2000,DATEADD(quarter, @Quarter - 1, '20000101'));
SET @EndRange = DATEADD(quarter, 1, @StartRange);


SELECT Query1.my,Query1.Priorita, count(*) as righeKO from ( select @MyCount as my,VW_ATT_Attivita.ID_Attivita, VW_ATT_Attivita.Cod_Attivita, VW_ATT_Attivita.DataOraAtt, VW_ATT_Attivita.DataOraFineAtt, ANA_MW_Sedi.Cod_Sede, ANA_MW_Sedi.Sede,
Cust_Sedi_Priorita.TEMPO_INTERVENTO_ALTA, Cust_Sedi_Priorita.TEMPO_INTERVENTO_MEDIA, Cust_Sedi_Priorita.TEMPO_INTERVENTO_BASSA, Cust_Sedi_Priorita.TEMPO_SOLUZIONE_ALTA,
Cust_Sedi_Priorita.TEMPO_SOLUZIONE_MEDIA, Cust_Sedi_Priorita.TEMPO_SOLUZIONE_BASSA, KPI_VIEW_RICHIESTE_ALL.Priorita, KPI_VIEW_RICHIESTE_ALL.Cliente, KPI_VIEW_RICHIESTE_ALL.COD_LOG,
KPI_VIEW_RICHIESTE_ALL.Stato, KPI_VIEW_RICHIESTE_ALL.DataOra, cast((abs(DATEDIFF(minute,VW_ATT_Attivita.DataOraAtt,KPI_VIEW_RICHIESTE_ALL.DataOra)))as numeric (10,2))/60 as InterventoIn,

CASE
WHEN priorita = 'ALTA' and (cast((abs(DATEDIFF(minute,VW_ATT_Attivita.DataOraAtt,KPI_VIEW_RICHIESTE_ALL.DataOra)))as numeric (10,2))/60) > TEMPO_INTERVENTO_ALTA then 'KO'
WHEN priorita = 'BASSA'and (cast((abs(DATEDIFF(minute,VW_ATT_Attivita.DataOraAtt,KPI_VIEW_RICHIESTE_ALL.DataOra)))as numeric (10,2))/60) > TEMPO_INTERVENTO_BASSA then 'KO'
WHEN priorita = 'MEDIA' and (cast((abs(DATEDIFF(minute,VW_ATT_Attivita.DataOraAtt,KPI_VIEW_RICHIESTE_ALL.DataOra)))as numeric (10,2))/60) > TEMPO_INTERVENTO_MEDIA then 'KO'
ELSE 'OK'
END AS Riscontro

FROM VW_ATT_Attivita INNER JOIN
KPI_VIEW_RICHIESTE_ALL INNER JOIN
ANA_MW_Sedi INNER JOIN
Cust_Sedi_Priorita ON ANA_MW_Sedi.Cod_Sede = Cust_Sedi_Priorita.COD_SEDE ON KPI_VIEW_RICHIESTE_ALL.Cod_Sede = ANA_MW_Sedi.Cod_Sede ON
VW_ATT_Attivita.Cod_Log = KPI_VIEW_RICHIESTE_ALL.Cod_Log

WHERE (KPI_VIEW_RICHIESTE_ALL.Stato = 'Chiusa') AND
(dbo.KPI_VIEW_RICHIESTE_ALL.Data >= @StartRange AND dbo.KPI_VIEW_RICHIESTE_ALL.Data <= @EndRange)



) as query1

group by Query1.priorita,Query1.my



END

COme risultato mi da il count di tutte le righe , io vorrei anche una colonna con il counter di tutte le righe dove Query1.Riscontro='KO'.
Esempio:
SELECT Query1.my,Query1.Priorita, count(*) as righeKO ,count(Rscontro='KO') as righeNon BUone, ovviamente non funzione.
HO provate ad inserire anche una variabile Mycounter per memorizzare il numero di righe ma non funziona.
Grazie

alx_81 Profilo | Guru

>Ciao,
ciao

>COme risultato mi da il count di tutte le righe , io vorrei anche
>una colonna con il counter di tutte le righe dove Query1.Riscontro='KO'.
>Esempio:
>SELECT Query1.my,Query1.Priorita, count(*) as righeKO ,count(Rscontro='KO')
>as righeNon BUone, ovviamente non funzione.
>HO provate ad inserire anche una variabile Mycounter per memorizzare
>il numero di righe ma non funziona.
spero di aver capito bene.. prova il seguente esempio con dati di prova:

USE tempdb; GO CREATE TABLE #tempRows ( IDRow int IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED , RowData varchar(20) NOT NULL , Priorita int NOT NULL , Riscontro char(2) NOT NULL ); GO INSERT INTO #tempRows (RowData, Priorita, Riscontro) VALUES ('UNO', 1, 'OK'), ('DUE', 1, 'KO'), ('TRE', 1, 'KO'), ('QUATTRO', 1, 'KO'), ('CINQUE', 2, 'OK'), ('SEI', 2, 'OK'), ('SETTE', 2, 'KO'), ('OTTO', 3, 'KO'), ('NOVE', 3, 'KO'), ('DIECI', 4, 'OK'); GO /* primo resultset RowData Priorita Riscontro -------------------- ----------- --------- UNO 1 OK DUE 1 KO TRE 1 KO QUATTRO 1 KO CINQUE 2 OK SEI 2 OK SETTE 2 KO OTTO 3 KO NOVE 3 KO DIECI 4 OK */ -- la tua query raggruppa circa così SELECT Righe = COUNT(*) , Priorita , RigheNonBuone = SUM(CASE WHEN Riscontro = 'KO' THEN 1 ELSE 0 END) FROM #tempRows GROUP BY Priorita; /* conteggio righe non buone Righe Priorita RigheNonBuone ----------- ----------- ------------- 4 1 3 3 2 1 2 3 2 1 4 0 */ DROP TABLE #tempRows; GO

>Grazie
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

arena_luigi Profilo | Newbie

Grazie!!!
Ora la testo subito e ti aggiorno,ma dall'esempio vedo già che dovrebbe andare bene.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5