View Sql server 05

lunedì 14 gennaio 2008 - 14.55

ciccios100 Profilo | Junior Member

Ciao a tutti,
il mio problema è questo:
Ho 2 tabella una di nome Anag che è composta da cod_anag;nome;cognome;indirizzo;telefono;
e la seconda Eventi che è composta da:
cod_evento;cod_anag;data_inserimento;note evento;
Devo creare una vista che abbia al suo interno come record tutti i record della tabella Anag e come campi tutti i suoi campi della tabella Anag più il campo note della tabella Eventi.Come posso fare?Ho provato con una
SELECT (campi che mi servono)
From Anag INNER JOIN Eventi ON Anag.cod_anag=Eventi.cod_anag
ma naturalmente nella vista mi vengono fuori soltanto i 5 record che sono inseriti nella tabella eventi....
Spero di essere stato abbastanza chiaro...grazie a tutti e ciao!
Ciccio
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>Come posso fare?
Postare un esempio completo con la struttura delle tabelle (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vuoi ottenere a partire da quei dati.

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

ciccios100 Profilo | Junior Member

Tabella Anag
CREATE TABLE [dbo].[Anag](
[a_Code] [varchar](15) NOT NULL,--codice cliente
[a_Desc] [varchar](100) NULL,--nome e cognome
[a_Addr] [varchar](100) NULL,--indirizzo
[a_phone] [varchar](30) NULL,--telefono
[a_fax] [varchar](30) NULL,--fax
[a_email] [varchar](255) NULL,--email

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

Tabella Eventi
CREATE TABLE [dbo].[Eventi](
[ev_ID] [int] IDENTITY(1,1) NOT NULL,--Codice dell'evento
[ev_Cliente] [varchar](15) NOT NULL,--Codice del cliente a cui è associato l'evento
[ev_DescCliente] [varchar](100) NULL,--Nome e cognome del cliente
[ev_Notes] [text] NULL,--Note relative all'evento
[ev_Tipo] [varchar](10) NOT NULL,--Tipologia dell'evento
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Le tabelle sono già popolate quindi non ho fatto nessuna insert
La vista che ho creato io è questa:

SELECT Anag.a_Code,Anag.a_Desc,Anag.a_Addr,Anag.a_phone,Anag.a_fax,Anag.a_email,Eventi.ev_ID,Eventi.ev_Notes
From Anag INNER JOIN Eventi ON Anag.a_Code=Eventi.ev_ID

Questa vista però ha due inconvenienti per me,il primo,è che nel campo eventi.ev_Notes(note dell'evento) di questa vista devo ottenere come risultato le note di tutti gli eventi appartenenti a quel cliente,esempio:
Tabella Eventi:
ev_ID=001;ev_Cliente=Cli001;ev_DescCliente='Claudio Rossi';ev_Notes='il numero risulta occupato';ev_Tipo='Telefonata'
ev_ID=002;ev_Cliente=Cli001;ev_DescCliente='Claudio Rossi';ev_Notes='Sono riuscito a parlare con lui e mi ha chiesto l'invio di materiale pubblicitario';ev_Tipo='Telefonata'
Vista che desidero ottenere:
Anag.a_Code=Cli001;Anag.a_Desc='Claudio Rossi';Anag.a_Addr='Via Verdi,11';Anag.a_phone=0521203564;Anag.a_fax=0521203565;Anag.a_email=c.rossi@email.it,Eventi.ev_ID=002,Eventi.ev_Notes='il numero risulta occupato'+'Sono riuscito a parlare con lui e mi ha chiesto l'invio di materiale pubblicitario'
E possibile ottenere questo risultato?
Inoltre in questa vista vorrei ottenere tutti i record della tabella anag,e nel caso al cliente non sia associato nessun evento vorrei che mi lasciasse vuoto il campo ev_Notes...cmq x questo problema ho trovato una scappatoia creando un altra vista....
Spero di essere stato chiaro anche se forse un pò troppo prolisso,
cmq ti ringrazio in anticipo di tutto,ciao!


Ciccio
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>Spero di essere stato chiaro anche se forse un pò troppo prolisso,
Il fatto è che non mi hai fornito i comandi di INSERT ed il result set finale che vuoi ottenere...

>cmq ti ringrazio in anticipo di tutto,ciao!
Prego.

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

ciccios100 Profilo | Junior Member

>>Il fatto è che non mi hai fornito i comandi di INSERT
>ecco le insert
Tabella Anag
INSERT INTO [dbo].[Anag]
([a_Code]
,[a_Desc]
,[a_Addr]
,[a_phone]
,[a_fax]
,[a_email]

VALUES
('Cli001', varchar(15),
,'Claudio Rossi', varchar(100),
,'Via Verdi,11', varchar(100),
,'0521203564', varchar(30),
,'0521203565', varchar(30),
,'c.rossi@email.it', varchar(255),
)
Tabella Eventi
1°Record
INSERT INTO [dbo].[Eventi]
([ev_ID]
,[ev_Tipo]
,[ev_Cliente]
,[ev_DescCliente]
,[ev_Notes]

VALUES
('001', varchar(10),
,'Telefonata', varchar(10),
,'Cli001', varchar(15),
,'Claudio Rossi', varchar(100),
,'il numero risulta occupato', text,
)
2°Record
INSERT INTO [dbo].[Eventi]
([ev_ID]
,[ev_Tipo]
,[ev_Cliente]
,[ev_DescCliente]
,[ev_Notes]

VALUES
('001', varchar(10),
,'Telefonata', varchar(10),
,'Cli001', varchar(15),
,'Claudio Rossi', varchar(100),
,'Sono riuscito a parlare con lui e mi ha chiesto l'invio di materiale pubblicitario', text,
)

>>ed il result set finale che vuoi ottenere...
>ed ecco il risultato che voglio ottenere
Code=Cli001
Desc='Claudio Rossi'
Addr='ViaVerdi,11'; Anag.a_phone=0521203564; Anag.a_fax=0521203565;
email=c.rossi@email.it;
note='il numero risulta occupato'+'Sono riuscito a parlare con lui e mi ha chiesto l'invio di materiale pubblicitario'
Non so se sono le informazioni che ti servivano...spero di si,le insert sono quelle che genera automaticamente SQL server che ho riempito con dei valori....grazie ancora!


Ciccio
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

Che versione di SQL Server utilizzi?

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

ciccios100 Profilo | Junior Member

la '05 express
Ciccio
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

Facciamo qualche considerazione:

1) La tabella dbo.Anag non rispetta la prima forma normale dato che esistono colonne che non contengono valori univoci (a_Desc)
2) Le tabelle non hanno alcun constraint di PK e FK
3) Nella tabella dbo.Eventi non ha alcun senso riportare nuovamente il nome ed il cognome del cliente (a meno di denormalizzazioni BEN STUDIATE a causa di problemi specifici)
4) Il data type Text è deprecato, utilizza al suo posto varchar(max)

Dato che utilizzi SQL Server 2005 puoi sfruttare "a tuo favore" la clausola FOR XML PATH per concatenare il contenuto della colonna ev_Notes:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

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

ciccios100 Profilo | Junior Member

>Facciamo qualche considerazione:
>
>1) La tabella dbo.Anag non rispetta la prima forma normale dato
>che esistono colonne che non contengono valori univoci (a_Desc)
>2) Le tabelle non hanno alcun constraint di PK e FK
>3) Nella tabella dbo.Eventi non ha alcun senso riportare nuovamente
>il nome ed il cognome del cliente (a meno di denormalizzazioni
>BEN STUDIATE a causa di problemi specifici)
>4) Il data type Text è deprecato, utilizza al suo posto varchar(max)
Il Db che sto usando viene installato automaticamente con un altro programma,io sto cercando di crearmi delle viste per poi tirarmi fuori delle stampe,ecco perchè non posso andare a toccare la struttura delle tabelle....non c'è un modo di ottenere lo stesso risultato senza cambiare il data type Text in varchar(max)?

Ciccio
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>Il Db che sto usando viene installato automaticamente con un
>altro programma
...fatto coi piedi per quel poco che ho visto (almeno per quanto riguarda il database)

>non c'è un modo di ottenere lo
>stesso risultato senza cambiare il data type Text in varchar(max)?

Casta esplicitamente la colonna in varchar(max):

SELECT A.* , STUFF( ( SELECT ' ' + CAST(ev_Notes AS varchar(max)) AS [text()] FROM dbo.Eventi WHERE ev_Cliente = A.a_Code ORDER BY ev_ID FOR XML PATH('') ), 1, 1, '') AS Notes FROM dbo.Anag AS A;

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

ciccios100 Profilo | Junior Member

Ho modificato la query come mi hai suggerito,ma mi viene fuori un errore:
Errore di esecuzione SQL
Istruzione SQL eseguita:query........
Origine errore:Net SqlClient Data Provider
Messaggio di errore: sintassi non corretta in prossimità della parola chiave 'ORDER'
Ho provato anche a levare l'order by,ma mi da lo stesso errore in prossimità della parola chiave FOR....

Ciccio
>>Domandare è lecito,rispondere è cortesia

lbenaglia Profilo | Guru

>Ho provato anche a levare l'order by,ma mi da lo stesso errore
>in prossimità della parola chiave FOR....

Hai copiato PER INTERO il mio esempio?
Inizia a studiare quello, poi adatterai il tuo...

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

ciccios100 Profilo | Junior Member

Ok....Ci lavorato un pò ma alla fine è andato..................Grazie mille
Ciccio
>>Domandare è lecito,rispondere è cortesia
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5