salve
luciano.net ha scritto:
Eseguo il conteggio di alcuni record in una vista che unisce due tabelle tramite la chiave primaria e li raggruppo per un valore:
Select Valore1, COUNT(Valore2) as NumeroRicorrenze
FROM view_Valori
GROUP BY Valore1
ottengo un recordset con due colonne, ad es:
PIPPO 3
PLUTO 2
PAPERINO 4
I valori con NumeroRicorrenze= 0 non appaiono, mentre io ne ho bisogno per disegnare la mia tabella in questo modo:
PIPPO 3
PLUTO 2
PAPERINO 4
ORAZIO 0
Ho provato a costruire la vista con i vari tipi di JOIN ma non ho ottenuto nulla di differente.
Un'idea?
Luciano
la funzione di aggregazione COUNT() restituisce il numero di voci di un gruppo comprendendo ancue eventuali NULL, ma probabilmente il tuo problema deriva dalla mancanza di proiezione sull'intersezione della regola DRI...
ad ogni modo, modificando la natural join in una join esterna dovrebbe risolverti il problema..
SET NOCOUNT ON
CREATE TABLE dbo.masterT (
Id int NOT NULL PRIMARY KEY ,
Dati varchar(10)
)
CREATE TABLE dbo.detailT (
Id int NOT NULL PRIMARY KEY ,
IdRif int NOT NULL
CONSTRAINT fk_masterT_detailT
FOREIGN KEY
REFERENCES dbo.masterT (Id),
Dati varchar(10)
)
GO
INSERT INTO dbo.masterT VALUES ( 1 , 'Paperino' )
INSERT INTO dbo.masterT VALUES ( 2 , 'Topolino' )
INSERT INTO dbo.masterT VALUES ( 3 , 'vuoto' )
INSERT INTO dbo.detailT VALUES ( 1 , 1 , 'Paperino1' )
INSERT INTO dbo.detailT VALUES ( 2 , 1 , 'Paperino2' )
INSERT INTO dbo.detailT VALUES ( 3 , 1 , 'Paperino3' )
INSERT INTO dbo.detailT VALUES ( 4 , 2 , 'Topolino1' )
INSERT INTO dbo.detailT VALUES ( 5 , 2 , 'Topolino2' )
SELECT m.dati AS [Oggetto], COUNT(d.Id) AS [Ricorrenze]
FROM dbo.masterT m LEFT JOIN dbo.detailT d
ON m.Id = d.IdRif
GROUP BY m.Dati
GO
DROP TABLE dbo.detailT , dbo.masterT
come vedrai dal risultato, ti viene anche emesso un warning relativo a eventuali parziali eliminazioni delle proiezioni di NULL
Warning: Null value is eliminated by an aggregate or other SET operation.
,
informazione comunque eliminabile provvedendo l'impostazione
SET ANSI_WARNINGS OFF
, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_set-set_6d2r.asp
saluti