Sql 2005 Compact Edition

sabato 10 novembre 2007 - 12.30

rspadar Profilo | Newbie

Salve,

sto provando ad eseguire la query su un palmare con SQL Ce 3.1:



SELECT Id, Cognome, Nome FROM Anagrafica AS anag

WHERE

((SELECT SUM(Prezzo) AS Expr1 FROM Acquisti AS i WHERE (Saldo = 0)

AND

(idanagrafica = anag.id))

-

(SELECT SUM(Rata) AS Expr1 FROM Incassi AS a WHERE (Saldo = 0) AND (idanagrafica = anag.id)) < 200)



ma non funziona.

Provata su SQL Express 2005 va tranquilla e mi da i risultati aspettati.

L'errore sul palmare è:

Param 0: 1

Param 1: 57

Param 2: 0

Param 3: select

Se prendo le select singolarmente vanno.

Ma è una limitazione del SQL Ce 3.1 (Compact edition)?



Raffaele

lbenaglia Profilo | Guru

>sto provando ad eseguire la query su un palmare con SQL Ce 3.1:
<SNIP>
>Ma è una limitazione del SQL Ce 3.1 (Compact edition)?

Ciao Raffaele,

Prova a riscrivere la query nel seguente modo:

SELECT A.Id, A.Cognome, A.Nome FROM Anagrafica AS A INNER JOIN Acquisti AS ACQ ON A.ID = ACQ.idanagrafica INNER JOIN Incassi AS I ON A.ID = I.idanagrafica WHERE ACQ.Saldo = 0 AND I.Saldo = 0 GROUP BY Id, Cognome, Nome HAVING SUM(ACQ.Prezzo) - SUM(I.Rata) < 200;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

Ecco le queri a confronto:

SELECT A.id, A.Cognome, A.Nome
FROM Anagrafica AS A INNER JOIN
Acquisti AS ACQ ON A.id = ACQ.idanagrafica INNER JOIN
Incassi AS I ON A.id = I.idanagrafica
WHERE (ACQ.Saldo = 0) AND (I.Saldo = 0)
GROUP BY A.id, A.Cognome, A.Nome
HAVING (SUM(ACQ.Prezzo) - SUM(I.Rata) < 400)


SELECT id, Cognome, Nome
FROM Anagrafica AS anag
WHERE
((SELECT SUM(Prezzo) AS Expr1 FROM Acquisti AS i WHERE
(Saldo = 0) AND (idanagrafica = anag.id)) -
(SELECT SUM(Rata) AS Expr1 FROM Incassi AS a WHERE (Saldo
= 0) AND (idanagrafica = anag.id))
< 200)

La mia restiruisce 36 record ma non funziona su SQL Ce mi da i dati correttamente, la tua
restituisce N. 1 riga e funziona su SQL Ce però la differenza tra le SUM sono sballate come se prendesse molti più valori nel calcolo.
Adesso sto cercando di capire dov'è il problema sulla tua ma fino ad ora non
sono riuscito a venirne fuori.
Puoi aiutarmi?


Raffaele


lbenaglia Profilo | Guru

>Puoi aiutarmi?
No, puoi farlo tu postando la struttura delle 3 tabelle (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vorresti ottenere con quei dati

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

Ecco tabella incassi:

CREATE TABLE [dbo].[Incassi](
[Rata] [money] NULL,
[CampoData] [datetime] NULL,
[Saldo] [bit] NULL CONSTRAINT [DF_Incassi_Saldo_r] DEFAULT (0),
[id] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Incassi_id] DEFAULT (newid()),
[idanagrafica] [uniqueidentifier] NULL,
CONSTRAINT [PK_Incassi_1] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PRIMARY]
) ON [PRIMARY]

Tabella Acquisti

CREATE TABLE [dbo].[Acquisti](
[CampoData] [datetime] NULL,
[Prezzo] [money] NULL,
[Quantita] [int] NULL,
[Saldo] [bit] NULL CONSTRAINT [DF_Acquisti_Saldo_r] DEFAULT (0),
[id] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Acquisti_id] DEFAULT (newid()),
[idanagrafica] [uniqueidentifier] NULL,
[idarticolo] [uniqueidentifier] NULL,
CONSTRAINT [PK_Acquisti_1] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PRIMARY]
) ON [PRIMARY]

Tabella Anagrafica:

CREATE TABLE [dbo].[Anagrafica](
[Cognome] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Nome] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Indirizzo] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Rata] [money] NULL,
[Tipologia] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[CampoNote] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[vecchia] [bit] NULL CONSTRAINT [DF_Anagrafica_vecchia_r] DEFAULT (1),
[id] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Anagrafica_id] DEFAULT (newid()),
CONSTRAINT [PK_Anagrafica_1] PRIMARY KEY CLUSTERED
(
[id] ASC
) ON [PRIMARY]
) ON [PRIMARY]

Raffaele

lbenaglia Profilo | Guru

>Ecco tabella incassi:
<SNIP>

Bene, ora ti mancano i dati di esempio
Posta una manciata di comandi INSERT INTO per ogni tabella ed il result set che vorresti ottenere con quei dati.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

Sono alla ricerca di qualche Sw che mi trasformi le righe della tabella in insert.

Raffaele

lbenaglia Profilo | Guru

>Sono alla ricerca di qualche Sw che mi trasformi le righe della
>tabella in insert.

Puoi utilizzare le stored procedures di Narayana Vyas Kondreddi:
http://vyaskn.tripod.com/code.htm#inserts

oppure amInsert di Andrea Montanari:
http://www.asql.biz/it/Download2005.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie




Raffaele

lbenaglia Profilo | Guru

Mannaggia Raffaele, io ti avevo chiesto una manciata di righe NON TUTTO IL CONTENUTO DELLE TABELLE!
Non me ne faccio niente di tutta quella roba.
Ora, se vuoi che ti risponda scegli 10 righe per tabella E DIMMI CHE RISULTATO TI ASPETTI!!!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

Ok ecco:

-- <[dbo].[Anagrafica]>

SET NOCOUNT ON;
SET DATEFORMAT ymd;

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Palermo', 'a', 'a', 70.00, 'm', 'a', 0, '0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Genova', 'a', 'a', 100.00, 's', 'a', 0, 'EC795D58-D02A-4CDE-9204-0864C37CA1FD' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Torino', 'a', 'a', 400.00, 's', 'a', 0, '940CEC4F-36ED-43F3-ADDF-1B0D35165801' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Firenze', 'a', 'a', 150.00, 'm', 'a', 0, '74400AD4-834A-41D1-B62A-4AFD94F82B97' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Cagliari', 'a', 'a', 50.00, 's', 'a', 0, 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Napoli', 'a', 'a', 100.00, 'm', 'a', 0, 'E1DD6D4E-4537-4D96-9DEE-5A33847FD169' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Pescara', 'a', 'a', 500.00, 'm', 'a', 0, '582A49CB-DBF8-4B1A-AE83-79CDC1D05BB3' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Milano', 'a', 'a', 300.00, 'm', 'a', 0, '1B83B9BD-A3A9-4381-AF2A-AC9A32A94084' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Roma', 'a', 'a', 200.00, 's', 'a', 0, '6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Foggia', 'a', 'a', 70.00, 'm', 'a', 0, 'EBE84F15-38BB-41FD-89F9-F92087475A75' );


-- </[dbo].[Anagrafica]>


-- <[dbo].[Acquisti]>

SET NOCOUNT ON;
SET DATEFORMAT ymd;

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '5300A866-C5D6-4D0E-9FD9-2AD0FD8ECBEF', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 650.00, 1, 0, '89946BB0-ADD5-4298-8998-38114A529CFC', 'EBE84F15-38BB-41FD-89F9-F92087475A75', '1663ED07-8DCC-47EA-A37A-60C78339CD8B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, 'F9E73C4E-DAA3-4629-A12B-412E2D561F1D', '0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, '3D700C97-DEE0-4BBF-AC61-4E4BB0F539BA', '6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, '4DB69F4B-6395-4DEE-B2D1-A737353F32EE', '74400AD4-834A-41D1-B62A-4AFD94F82B97', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '32E28EED-87CA-429F-BAB8-B71172C012C3', '940CEC4F-36ED-43F3-ADDF-1B0D35165801', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '7047F72E-618E-4441-96A6-C3424EF4D257', 'EC795D58-D02A-4CDE-9204-0864C37CA1FD', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 650.00, 1, 0, '091A0F18-3063-49B4-9403-C7BE5F8A559A', 'E1DD6D4E-4537-4D96-9DEE-5A33847FD169', '1663ED07-8DCC-47EA-A37A-60C78339CD8B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, 'E6BC8983-CAA8-4898-8FD8-CEF1307FE52D', '1B83B9BD-A3A9-4381-AF2A-AC9A32A94084', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 650.00, 1, 0, 'DFE37B72-3029-4B11-8A48-F7D51FD2CD2F', '582A49CB-DBF8-4B1A-AE83-79CDC1D05BB3', '1663ED07-8DCC-47EA-A37A-60C78339CD8B' );


-- </[dbo].[Acquisti]>


-- <[dbo].[Incassi]>

SET NOCOUNT ON;
SET DATEFORMAT ymd;

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 120.00, '2007-11-19 00:00:00.000', 0, 'DBB2842F-57D2-447C-96B4-02931AA14466', '1B83B9BD-A3A9-4381-AF2A-AC9A32A94084' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 150.00, '2007-11-19 00:00:00.000', 0, 'D5066ED3-5B30-433F-BBFB-088DB0E3FC31', 'EBE84F15-38BB-41FD-89F9-F92087475A75' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 700.00, '2007-11-19 00:00:00.000', 0, 'B731726C-5E69-40C4-BFAF-3195AA0E3A78', 'EC795D58-D02A-4CDE-9204-0864C37CA1FD' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 500.00, '2007-11-19 00:00:00.000', 0, 'AA3317E7-A485-4389-9B6A-8288A6734842', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 200.00, '2007-11-19 00:00:00.000', 0, 'BBE4234C-5933-49C7-8FA7-BD891A606D82', 'E1DD6D4E-4537-4D96-9DEE-5A33847FD169' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 80.00, '2007-11-19 00:00:00.000', 0, '4DB90F3C-D78E-450F-9C9E-E7B0E294520C', '74400AD4-834A-41D1-B62A-4AFD94F82B97' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 120.00, '2007-11-19 00:00:00.000', 0, 'E51414BC-693B-4D15-AADF-F8C5C75AC1F5', '582A49CB-DBF8-4B1A-AE83-79CDC1D05BB3' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 500.00, '2007-11-19 00:00:00.000', 0, '8B0AEFC5-1DC2-4D56-8B96-FC02493BFEFB', '940CEC4F-36ED-43F3-ADDF-1B0D35165801' );


-- </[dbo].[Incassi]>

Il risultato atteso è:

Firenze
Milano
Palermo
Roma


Invece si ha solo:

Firenze
Milano


Una cosa invece che ho notato è questa:

Palermo e Roma hanno un acquisto inferiore a 400 e non hanno incassi e non vengono considerati.

Poi ho fatto un altra prova che però non ti trovi.
Su cagliari ho inserito un altro incasso e anche se la differenza tra acquisti e incassi è minore di 400 non viene visualizzato.



Raffaele

lbenaglia Profilo | Guru

>Il risultato atteso è:
>
>Firenze
>Milano
>Palermo
>Roma
>
>
>Invece si ha solo:
>
>Firenze
>Milano

Iniziamo col dire che con i dati che hai posato ma mia query e la tua restituiscono ESATTAMENTE le stesse righe, ovvero:

id Cognome Nome ------------------------------------ -------- ----- 74400AD4-834A-41D1-B62A-4AFD94F82B97 Firenze a 1B83B9BD-A3A9-4381-AF2A-AC9A32A94084 Milano a (2 row(s) affected)

>Una cosa invece che ho notato è questa:
>
>Palermo e Roma hanno un acquisto inferiore a 400 e non hanno
>incassi e non vengono considerati.

Ecco qua il problema. Se non ci sono incassi devi gestire opportunamente la situazione, prima di tutto eseguendo una OUTER JOIN e poi gestire il valore NULL nelle condizioni di WHERE e HAVING mediante l'utilizzo di una funzione come COALESCE che restituisce il primo valore non NULL passato come argomento:

SELECT A.id , A.Cognome , A.Nome , SUM(ACQ.Prezzo) AS Prezzo , SUM(I.Rata) AS Rata , SUM(ACQ.Prezzo) - SUM(I.Rata) AS Differenza FROM Anagrafica AS A INNER JOIN Acquisti AS ACQ ON A.id = ACQ.idanagrafica LEFT JOIN Incassi AS I ON A.id = I.idanagrafica WHERE ACQ.Saldo = 0 AND COALESCE(I.Saldo, 0) = 0 GROUP BY A.id, A.Cognome, A.Nome HAVING (SUM(ACQ.Prezzo) - COALESCE(SUM(I.Rata), 0) < 400); /* Output: id Cognome Nome Prezzo Rata Differenza ------------------------------------ -------- ----- ------- ------- ----------- 0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2 Palermo a 325,00 NULL NULL 74400AD4-834A-41D1-B62A-4AFD94F82B97 Firenze a 325,00 80,00 245,00 1B83B9BD-A3A9-4381-AF2A-AC9A32A94084 Milano a 325,00 120,00 205,00 6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3 Roma a 325,00 NULL NULL Warning: Null value is eliminated by an aggregate or other SET operation. (4 row(s) affected) */


Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

E' la prima volta che vedo questa funzione.
Ultima cosa ho notato che quando ci sono 1 acquisto, 2 incassi comunque non viene visualizzato nulla.
E come se con la join non vedesse tutto quello che c'è negli incassi.

Raffaele

lbenaglia Profilo | Guru

>Ultima cosa ho notato che quando ci sono 1 acquisto, 2 incassi
>comunque non viene visualizzato nulla.

Come prima, posta dei dati di prova ed il risultato che vuoi ottenere.

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

Ecco:

-- <[dbo].[Incassi]>

SET NOCOUNT ON;
SET DATEFORMAT ymd;

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 120.00, '2007-11-19 00:00:00.000', 0, 'DBB2842F-57D2-447C-96B4-02931AA14466', '1B83B9BD-A3A9-4381-AF2A-AC9A32A94084' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 150.00, '2007-11-19 00:00:00.000', 0, 'D5066ED3-5B30-433F-BBFB-088DB0E3FC31', 'EBE84F15-38BB-41FD-89F9-F92087475A75' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 10.00, '2007-11-19 00:00:00.000', 0, 'EF63B684-E69C-41DC-BADD-106D2B625883', '0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 401.00, '2007-11-19 00:00:00.000', 0, 'B47118D3-17B2-4315-A05C-314F270280A8', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 700.00, '2007-11-19 00:00:00.000', 0, 'B731726C-5E69-40C4-BFAF-3195AA0E3A78', 'EC795D58-D02A-4CDE-9204-0864C37CA1FD' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 500.00, '2007-11-19 00:00:00.000', 0, 'AA3317E7-A485-4389-9B6A-8288A6734842', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 10.00, '2007-11-19 00:00:00.000', 0, 'B26DFEE0-7F94-4CC0-A3C9-9878620F28F9', '6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 10.00, '2007-11-20 00:00:00.000', 0, 'DD7C873C-88BB-46D3-B051-BAAAB3FA199B', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 200.00, '2007-11-19 00:00:00.000', 0, 'BBE4234C-5933-49C7-8FA7-BD891A606D82', 'E1DD6D4E-4537-4D96-9DEE-5A33847FD169' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 80.00, '2007-11-19 00:00:00.000', 0, '4DB90F3C-D78E-450F-9C9E-E7B0E294520C', '74400AD4-834A-41D1-B62A-4AFD94F82B97' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 120.00, '2007-11-19 00:00:00.000', 0, 'E51414BC-693B-4D15-AADF-F8C5C75AC1F5', '582A49CB-DBF8-4B1A-AE83-79CDC1D05BB3' );

INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
VALUES ( 500.00, '2007-11-19 00:00:00.000', 0, '8B0AEFC5-1DC2-4D56-8B96-FC02493BFEFB', '940CEC4F-36ED-43F3-ADDF-1B0D35165801' );


-- </[dbo].[Incassi]>


-- <[dbo].[Acquisti]>

SET NOCOUNT ON;
SET DATEFORMAT ymd;

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '5300A866-C5D6-4D0E-9FD9-2AD0FD8ECBEF', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 650.00, 1, 0, '89946BB0-ADD5-4298-8998-38114A529CFC', 'EBE84F15-38BB-41FD-89F9-F92087475A75', '1663ED07-8DCC-47EA-A37A-60C78339CD8B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, 'F9E73C4E-DAA3-4629-A12B-412E2D561F1D', '0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, '3D700C97-DEE0-4BBF-AC61-4E4BB0F539BA', '6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, '4DB69F4B-6395-4DEE-B2D1-A737353F32EE', '74400AD4-834A-41D1-B62A-4AFD94F82B97', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '32E28EED-87CA-429F-BAB8-B71172C012C3', '940CEC4F-36ED-43F3-ADDF-1B0D35165801', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '7047F72E-618E-4441-96A6-C3424EF4D257', 'EC795D58-D02A-4CDE-9204-0864C37CA1FD', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 650.00, 1, 0, '091A0F18-3063-49B4-9403-C7BE5F8A559A', 'E1DD6D4E-4537-4D96-9DEE-5A33847FD169', '1663ED07-8DCC-47EA-A37A-60C78339CD8B' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, 'E6BC8983-CAA8-4898-8FD8-CEF1307FE52D', '1B83B9BD-A3A9-4381-AF2A-AC9A32A94084', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 325.00, 1, 0, '5D921D5A-1222-436A-AC91-E06EDEBD66B5', 'C0EA6534-8777-4E09-BFBA-32663322674F', 'A1B30B65-B3AF-4A4E-971B-42EC5FE30E50' );

INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
VALUES ( '2007-11-19 00:00:00.000', 650.00, 1, 0, 'DFE37B72-3029-4B11-8A48-F7D51FD2CD2F', '582A49CB-DBF8-4B1A-AE83-79CDC1D05BB3', '1663ED07-8DCC-47EA-A37A-60C78339CD8B' );


-- </[dbo].[Acquisti]>


-- <[dbo].[Anagrafica]>

SET NOCOUNT ON;
SET DATEFORMAT ymd;

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Palermo', 'a', 'a', 70.00, 'm', 'a', 0, '0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Genova', 'a', 'a', 100.00, 's', 'a', 0, 'EC795D58-D02A-4CDE-9204-0864C37CA1FD' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Torino', 'a', 'a', 400.00, 's', 'a', 0, '940CEC4F-36ED-43F3-ADDF-1B0D35165801' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Trento', 'a', 'a', 100.00, 'm', 'a', 0, 'C0EA6534-8777-4E09-BFBA-32663322674F' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Firenze', 'a', 'a', 150.00, 'm', 'a', 0, '74400AD4-834A-41D1-B62A-4AFD94F82B97' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Cagliari', 'a', 'a', 50.00, 's', 'a', 0, 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Napoli', 'a', 'a', 100.00, 'm', 'a', 0, 'E1DD6D4E-4537-4D96-9DEE-5A33847FD169' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Pescara', 'a', 'a', 500.00, 'm', 'a', 0, '582A49CB-DBF8-4B1A-AE83-79CDC1D05BB3' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Milano', 'a', 'a', 300.00, 'm', 'a', 0, '1B83B9BD-A3A9-4381-AF2A-AC9A32A94084' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Roma', 'a', 'a', 200.00, 's', 'a', 0, '6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3' );

INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
VALUES ( 'Foggia', 'a', 'a', 70.00, 'm', 'a', 0, 'EBE84F15-38BB-41FD-89F9-F92087475A75' );


-- </[dbo].[Anagrafica]>


Risultati Attesi:

Palermo
Trento
Firenze
Milano
Roma
Cagliari


Raffaele

lbenaglia Profilo | Guru

> INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
> VALUES ( 401.00, '2007-11-19 00:00:00.000', 0, 'B47118D3-17B2-4315-A05C-314F270280A8', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );
...
> INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
> VALUES ( 500.00, '2007-11-19 00:00:00.000', 0, 'AA3317E7-A485-4389-9B6A-8288A6734842', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );
...
> INSERT INTO [dbo].[Incassi] ([Rata], [CampoData], [Saldo], [id], [idanagrafica])
> VALUES ( 10.00, '2007-11-20 00:00:00.000', 0, 'DD7C873C-88BB-46D3-B051-BAAAB3FA199B', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );
...
> INSERT INTO [dbo].[Acquisti] ([CampoData], [Prezzo], [Quantita], [Saldo], [id], [idanagrafica], [idarticolo])
> VALUES ( '2007-11-19 00:00:00.000', 1300.00, 1, 0, '5300A866-C5D6-4D0E-9FD9-2AD0FD8ECBEF', 'B30D1B68-0787-404A-B8A9-561F3EEA3B82', 'EE4E72F0-1AF4-422F-B6B1-10E08DFCA22B' );
...
> INSERT INTO [dbo].[Anagrafica] ([Cognome], [Nome], [Indirizzo], [Rata], [Tipologia], [CampoNote], [vecchia], [id])
> VALUES ( 'Cagliari', 'a', 'a', 50.00, 's', 'a', 0, 'B30D1B68-0787-404A-B8A9-561F3EEA3B82' );

Questi sono i dati relativi a Cagliari.
Il saldo sia degli incassi che degli acquisti è 0, quindi devo considerare tutte le righe.
Dato che abbiamo 3 incassi per ogni acquisto la JOIN andrà a moltiplicare per 3 il prezzo di acquisto: 1300,00 * 3 = 3900,00
Ora somma la rata degli incassi: 401,00 + 500,00 + 10,00 = 911,00

Fai la differenza: 3900,00 - 911,00 = 2989,00 che non soddisfa la clausola HAVING della query.

Se vuoi considerare solo 1 acquisto indipendentemente dal numero di incassi puoi aggiungere la clausola DISTINCT alla funzione di aggregazione SUM():

SELECT A.id , A.Cognome , A.Nome , SUM(DISTINCT ACQ.Prezzo) AS Prezzo , SUM(I.Rata) AS Rata , SUM(DISTINCT ACQ.Prezzo) - SUM(I.Rata) AS Differenza FROM Anagrafica AS A INNER JOIN Acquisti AS ACQ ON A.id = ACQ.idanagrafica LEFT JOIN Incassi AS I ON A.id = I.idanagrafica WHERE ACQ.Saldo = 0 AND COALESCE(I.Saldo, 0) = 0 GROUP BY A.id, A.Cognome, A.Nome HAVING (SUM(DISTINCT ACQ.Prezzo) - COALESCE(SUM(I.Rata), 0) < 400); /* Output: id Cognome Nome Prezzo Rata Differenza ------------------------------------ ---------- ----- -------- -------- ----------- 0A2ACEE7-4B13-4A6E-B0C7-04D473E398D2 Palermo a 325,00 10,00 315,00 C0EA6534-8777-4E09-BFBA-32663322674F Trento a 325,00 NULL NULL 74400AD4-834A-41D1-B62A-4AFD94F82B97 Firenze a 325,00 80,00 245,00 B30D1B68-0787-404A-B8A9-561F3EEA3B82 Cagliari a 1300,00 911,00 389,00 1B83B9BD-A3A9-4381-AF2A-AC9A32A94084 Milano a 325,00 120,00 205,00 6EDD8BDC-B2C6-45EB-B9E2-B6A44C6195D3 Roma a 325,00 10,00 315,00 Warning: Null value is eliminated by an aggregate or other SET operation. (6 row(s) affected) */

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

rspadar Profilo | Newbie

Grazie per l'aiuto, onestamente non ci sarei mai arrivato.

Cmq un problema è rimasto, su sql CE 3.1 non prende la distinct

errore 0x80040e14

param.0:13
param.1:13
param.2:0
param.3:distinct
param.4:
param.5:

Raffaele
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