9 messaggi dal 17 ottobre 2003
Ciao a tutti,
provo a spiegare il mio problema.

Sto utilizzando SQL server ed ho:

una tabella anagrafica
Nome, Cognome
Mario, Rossi

una tabella pagamenti
Anno, Importo
2008, 200 ¤
2009, 180 ¤

E' possibile creare una vista del genere?
Nome, Cognome, ImportoAnno1, ImportoAnno2

Es.:
Nome----Cognome---Importo2008---Importo2009
Mario-----Rossi----------200 ¤--------------180 ¤

Grazie in anticipo!
203 messaggi dal 21 maggio 2004
Non ho capito bene la tua domanda..qual'è la relazione tra le 2 tabell?
ciao
Ste
9 messaggi dal 17 ottobre 2003
Intanto ti ringrazio per la risposta.
Naturalmente sulla tabella pagamenti c'è un'idanagrafica per collegare i pagamenti al cliente,
in pratica vorrei vedere su un'unica riga i pagamenti di un cliente nei vari anni...
Modificato da websnake il 06 novembre 2009 15.02 -
Modificato da websnake il 06 novembre 2009 15.03 -
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
websnake wrote:
Ciao a tutti,
provo a spiegare il mio problema.

Sto utilizzando SQL server ed ho:

una tabella anagrafica
Nome, Cognome
Mario, Rossi

una tabella pagamenti
Anno, Importo
2008, 200 ¤
2009, 180 ¤

E' possibile creare una vista del genere?
Nome, Cognome, ImportoAnno1, ImportoAnno2

Es.:
Nome----Cognome---Importo2008---Importo2009
Mario-----Rossi----------200 ¤--------------180 ¤

Grazie in anticipo!

penso tu possa risolvere similarmente a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t1 (
Id int NOT NULL PRIMARY KEY,
Cognome varchar(5) NOT NULL,
Nome varchar(5) NOT NULL
);
CREATE TABLE dbo.t2 (
Id int NOT NULL PRIMARY KEY,
IdT int NOT NULL
CONSTRAINT fk_t2$has$t1
FOREIGN KEY REFERENCES dbo.t1(Id),
Anno int NOT NULL,
Importo int NOT NULL
);
GO
INSERT INTO dbo.t1 VALUES ( 1, 'Rossi', 'Mario' );
INSERT INTO dbo.t1 VALUES ( 2, 'A', 'A' );
INSERT INTO dbo.t1 VALUES ( 3, 'B', 'B' );

INSERT INTO dbo.t2 VALUES ( 1, 1, 2008, 10 );
INSERT INTO dbo.t2 VALUES ( 2, 1, 2009, 10 );
INSERT INTO dbo.t2 VALUES ( 3, 2, 2008, 10 );
INSERT INTO dbo.t2 VALUES ( 4, 3, 2009, 10 );
GO
SELECT t1.Cognome, t1.Nome
, CASE WHEN t2.Anno = 2008 THEN t2.Importo ELSE 0 END AS [2008] , CASE WHEN t2.Anno = 2009 THEN t2.Importo ELSE 0 END AS [2009] FROM dbo.t1 t1
LEFT JOIN dbo.t2 t2 ON t2.IdT = t1.Id
GO
DROP TABLE dbo.t2, dbo.t1;
--<------
Cognome Nome 2008 2009
-----
---
---------
-----------
Rossi Mario 10 0
Rossi Mario 0 10
A A 10 0
B B 0 10

purtroppo pero' puoi vedere che la rotazione e' statica e fatta a mano, cio' significa che dovrai di anno in anno aggiungere/rimuovere la proiezione interessante..
non c'e' purtroppo modo di renderla dinamica se non costruendo codice SQL dinamico da eseguirsi tramite EXEC @comando o simile...
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
9 messaggi dal 17 ottobre 2003
Ti ringrazio davvero molto Andrea per l'impegno, il mio problema cmq è che il database contiene migliaia di record ed ho visto che tu inserisci Nome e Cognome a mano nel codice.
E' un esempio o dovrei fare per forza così?
Per quanto riguarda il fatto di riscriverlo ogni anno non sarebbe un problema.
Ciao
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
websnake wrote:
Ti ringrazio davvero molto Andrea per l'impegno, il mio problema cmq è che il database contiene migliaia di record ed ho visto che tu inserisci Nome e Cognome a mano nel codice.
E' un esempio o dovrei fare per forza così?
Per quanto riguarda il fatto di riscriverlo ogni anno non sarebbe un problema.
Ciao

io ho fatto un esempio "completo".. ho creato la tabella "principale" e la tabella di "dettaglio" per poi quindi popolarle in qualche modo.. la parte "interessante", quella che potrebbe rispondere alla tua richiesta, e' quindi solo la proiezione..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

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.