28 messaggi dal 06 settembre 2005
www.virtuslucca.it
PRELIEVI:
IDMOVIMENTO
DESCRIZIONE

VERSAMENTI:
IDMOVIMENTO
DESCRIZIONE

MOVIMENTI_CC:
IDMOVIMENTO
IDCC
IMPORTO

MOVIMENTI:
IDMOVIMENTO
DATA


Una query che visualizza la roba seguente:

IDMOVIMENTO | DATA | PRELIEVI.DESCRIZIONE | VERSAMENTI.DESCRIZIONE | IMPORTO

Chiaramente la tabella prelievi e versamenti si dividono in maniera mutualmente esclusiva l'idmovimento. Ovvero se il movimento non sta nei prelievi in prelievi.descrizione ci voglio null e viceversa.

AIUTATEMI VI PREGOOOOOOO!!!!

CITIUS, ALTIUS, FORTIUS.
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
simonezzz wrote:
PRELIEVI:
IDMOVIMENTO
DESCRIZIONE

VERSAMENTI:
IDMOVIMENTO
DESCRIZIONE

MOVIMENTI_CC:
IDMOVIMENTO
IDCC
IMPORTO

MOVIMENTI:
IDMOVIMENTO
DATA

Una query che visualizza la roba seguente:

IDMOVIMENTO | DATA | PRELIEVI.DESCRIZIONE | VERSAMENTI.DESCRIZIONE | IMPORTO

Chiaramente la tabella prelievi e versamenti si dividono in maniera mutualmente esclusiva l'idmovimento. Ovvero se il movimento non sta nei prelievi in prelievi.descrizione ci voglio null e viceversa.

la modellazione della base dati e', IMVHO, veramente terrificante... ottieni comunque quanto da te desiderato, similarmente a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE PRELIEVI (
IDMOVIMENTO int,
DESCRIZIONE varchar(5)
);

CREATE TABLE VERSAMENTI (
IDMOVIMENTO int,
DESCRIZIONE varchar(5)
);

CREATE TABLE MOVIMENTI_CC (
IDMOVIMENTO int,
IDCC int,
IMPORTO decimal (18,4)
);

CREATE TABLE MOVIMENTI (
IDMOVIMENTO int,
DATA datetime
);
GO
INSERT INTO MOVIMENTI VALUES ( 1, '20080101' );
INSERT INTO MOVIMENTI VALUES ( 2, '20080102' );
INSERT INTO MOVIMENTI VALUES ( 3, '20080103' );
INSERT INTO MOVIMENTI VALUES ( 4, '20080104' );

INSERT INTO MOVIMENTI_CC VALUES ( 1, 1, 10 );
INSERT INTO MOVIMENTI_CC VALUES ( 2, 1, 5 );
INSERT INTO MOVIMENTI_CC VALUES ( 3, 1, 10 );
INSERT INTO MOVIMENTI_CC VALUES ( 4, 1, 8 );

INSERT INTO VERSAMENTI VALUES ( 1, 'V.1' );
INSERT INTO VERSAMENTI VALUES ( 3, 'V.2' );

INSERT INTO PRELIEVI VALUES ( 2, 'P.1' );
INSERT INTO PRELIEVI VALUES ( 4, 'P.2' );
GO
SELECT m.IDMOVIMENTO, m.DATA, p.DESCRIZIONE AS [Secrizione Prelievi], v.DESCRIZIONE AS [Secrizione Versamenti], c.IMPORTO
FROM MOVIMENTI m
JOIN MOVIMENTI_CC c ON m.IDMOVIMENTO = c.IDCC
LEFT JOIN PRELIEVI p ON m.IDMOVIMENTO = p.IDMOVIMENTO
LEFT JOIN VERSAMENTI v ON m.IDMOVIMENTO = v.IDMOVIMENTO
GO
DROP TABLE MOVIMENTI, MOVIMENTI_CC, PRELIEVI, VERSAMENTI;
--<-------
IDMOVIMENTO DATA Secrizione Prelievi Secrizione Versamenti IMPORTO
---------
---------------------
-----------------
-------------------
--------
1 2008-01-01 00 0 0.000 NULL V.1 10.0000
1 2008-01-01 00 0 0.000 NULL V.1 5.0000
1 2008-01-01 00 0 0.000 NULL V.1 10.0000
1 2008-01-01 00 0 0.000 NULL V.1 8.0000


preferire, come modellazione, un qualche cosa piu' simile a questo altrettanto triviale disegno,
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE CC (
ID int,
DESCRIZIONE varchar(10)
);

CREATE TABLE TIPOMOVIMENTO (
ID int PRIMARY KEY,
DESCRIZIONE varchar(10),
SEGNO smallint
CONSTRAINT chk_SEGNO
CHECK ((SEGNO = -1) OR (SEGNO = 1))
);

CREATE TABLE MOVIMENTI (
IDMOVIMENTO int,
DATA datetime,
);

CREATE TABLE MOVIMENTI_CC (
IDMOVIMENTO int,
IDCC int,
IMPORTO decimal (18,4),
Tipo int
CONSTRAINT fk_Movimento_cc$has$type
FOREIGN KEY REFERENCES TIPOMOVIMENTO(Id)
);
GO
INSERT INTO CC VALUES ( 1, 'Pippo' );
INSERT INTO CC VALUES ( 2, 'Pluto' );

INSERT INTO TIPOMOVIMENTO VALUES ( 1, 'Vers', 1 );
INSERT INTO TIPOMOVIMENTO VALUES ( 2, 'Prel', -1 );
INSERT INTO TIPOMOVIMENTO VALUES ( 3, 'GiroC+', 1 );
INSERT INTO TIPOMOVIMENTO VALUES ( 4, 'GiroC-', -1 );

INSERT INTO MOVIMENTI VALUES ( 1, '20080101' );
INSERT INTO MOVIMENTI VALUES ( 2, '20080102' );
INSERT INTO MOVIMENTI VALUES ( 3, '20080103' );
INSERT INTO MOVIMENTI VALUES ( 4, '20080104' );
INSERT INTO MOVIMENTI VALUES ( 5, '20080105' );

INSERT INTO MOVIMENTI_CC VALUES ( 1, 1, 10, 1 );
INSERT INTO MOVIMENTI_CC VALUES ( 2, 1, 5, 2);
INSERT INTO MOVIMENTI_CC VALUES ( 3, 1, 10, 1 );
INSERT INTO MOVIMENTI_CC VALUES ( 4, 1, 8, 2 );

INSERT INTO MOVIMENTI_CC VALUES ( 5, 1, 5, 4 );
INSERT INTO MOVIMENTI_CC VALUES ( 5, 2, 5, 3 );

GO
SELECT cc.DESCRIZIONE AS [Correntista],
t.DESCRIZIONE AS [Tipo Movimento],
m.DATA,
mc.IMPORTO * t.SEGNO AS [Importo con segno]
FROM CC cc
JOIN MOVIMENTI_CC mc ON mc.IDCC = cc.ID
JOIN MOVIMENTI m ON m.IDMOVIMENTO = mc.IDMOVIMENTO
JOIN TIPOMOVIMENTO t ON mc.Tipo = t.Id
GO
DROP TABLE MOVIMENTI, MOVIMENTI_CC;
DROP TABLE CC, TIPOMOVIMENTO;
--<--------
Correntista Tipo Movimento DATA Importo con segno ---------
------------
---------------------
----------------
Pippo Vers 2008-01-01 00 0 0.000 10.0000
Pippo Prel 2008-01-02 00 0 0.000 -5.0000
Pippo Vers 2008-01-03 00 0 0.000 10.0000
Pippo Prel 2008-01-04 00 0 0.000 -8.0000
Pippo GiroC- 2008-01-05 00 0 0.000 -5.0000
Pluto GiroC+ 2008-01-05 00 0 0.000 5.0000

dove non hai una tabella separata per versamenti e prelievi, che non mi pare abbia molto senso, ma una tabella separata di lookup direttamente per il tipo di operazione... per quanto riguarda l'importo del movimento, puoi utilizzare sia un segno sempre positivo con recupero del segno ad esempio dalla stessa tabella di lookup del tipo di operazione, che imputare direttamente il segno della stessa..

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
28 messaggi dal 06 settembre 2005
www.virtuslucca.it
Grazie mille per la soddisfacente risposta!!
A presto!

CITIUS, ALTIUS, FORTIUS.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.