Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Gestione attività associate ad un'anagrafica e visualizzazione con con...
domenica 15 giugno 2008 - 14.45
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
squilibrio
Profilo
| Expert
527
messaggi | Data Invio:
dom 15 giu 2008 - 14:45
Ciao a tutti, ho una tabella attività che può avere varie IDAttivitaStato:
T Telefonata
V Visita
P Preventivo
C Chiuso
io dovrei trovare lo stato di avanzamento delle attività (T, V, P o C) per ogni Anagrafica (Azienda) creado una query con X righe (X aziende) ed un campo 1/0 che mi indica se è presente/non presente un'attività (Eseguita) rispettivamente nello stato T V P C dell'azienda.
quindi
Anagrafica
CREATE TABLE [dbo].[Anagrafica](
[IDAnagrafica] [int] IDENTITY(1,1) NOT NULL,
[Cognome] [varchar](150) COLLATE Latin1_General_CI_AS NULL,
[Nome] [varchar](150) COLLATE Latin1_General_CI_AS NULL,
[RagioneSociale] [varchar](150) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_Clienti] PRIMARY KEY CLUSTERED
(
[IDAnagrafica] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Attività
CREATE TABLE [dbo].[Attivita](
[IDAttivita] [int] IDENTITY(1,1) NOT NULL,
[IDAttivitaStato] [varchar](1) COLLATE Latin1_General_CI_AS NULL,
[IDAttivitaTipo] [varchar](2) COLLATE Latin1_General_CI_AS NULL,
[IDAnagrafica] [int] NULL,
[Data] [datetime] NULL CONSTRAINT [DF_Attivita_Data] DEFAULT (getdate()),
[Descrizione] [varchar](max) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_Attivita] PRIMARY KEY CLUSTERED
(
[IDAttivita] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
IDAttivitaStato può essere E Eseguita, D Da Eseguire
IDAttivitaTipo può essere T Telefonata, V Visita, P Preventivo, C Chiuso
Ora ...ho creato una SP che in funzione dello stato (IDattivitaStato) passato alla SP mi recupera tutte le anagrafiche che sono ferme allo stato passato.
nella mia SP eseguo la stessa query query per ogni stato ... anche se forse avrei potuto crearne una unica (non è un problema cmq per me)
quindi se viene passato lo stato V all SP
devo trovare tutte le anagrafiche che sono ferme allo stato V (Eseguito)... quindi che non hanno nulla dopo V (non hanno P e C)... indipendentemetne dal fatto che si ci sia o meno una T
se viene passato lo stato P all SP
devo trovare tutte le anagrafiche che sono ferme allo stato P (Eseguito)... quindi che non hanno nulla dopo P (non hanno C)... indipendentemetne dal fatto che si ci sia o meno una T o una V
quindi se viene passato lo stato C all SP
devo trovare tutte le anagrafiche che sono ferme allo stato C (Eseguito)... quindi che non hanno nulla dopo C ... indipendentemetne dal fatto che si ci sia o meno una T o una V o un P
io ho provato con queste query ma il risultato non sembra essere corretto (nel senso che a volte non vengono recuperate attività :-((()
cosa sbaglio???
IF(@IDAttivitaStato = 'V')
BEGIN
SELECT
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='T') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Telefonata,
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='V') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Visita,
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='P') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Preventivo,
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='C') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Chiuso
FROM Anagrafica
WHERE
('V' in (SELECT IDAttivitaTipo FROM Attivita WHERE Attivita.IDAnagrafica = Anagrafica.IDAnagrafica)) AND
('P' not in (SELECT IDAttivitaStato FROM Attivita WHERE Attivita.IDAnagrafica = Anagrafica.IDAnagrafica)) AND
('C' not in (SELECT IDAttivitaStato FROM Attivita WHERE Attivita.IDAnagrafica = Anagrafica.IDAnagrafica))
END
IF(@IDAttivitaStato = 'P')
BEGIN
SELECT
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='T') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Telefonata,
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='V') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Visita,
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='P') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Preventivo,
(case when exists (SELECT 1 FROM Attivita WHERE (Attivita.IDAnagrafica = Anagrafica.IDAnagrafica) AND (IDAttivitaTipo='C') AND (IDAttivitaStato='E') AND (Privato = 0)) then 1 else 0 end) as Chiuso
FROM Anagrafica
WHERE
('P' in (SELECT IDAttivitaTipo FROM Attivita WHERE Attivita.IDAnagrafica = Anagrafica.IDAnagrafica)) AND
('C' not in (SELECT IDAttivitaStato FROM Attivita WHERE Attivita.IDAnagrafica = Anagrafica.IDAnagrafica)) AND
END
Torna su
Stanze Forum
Elenco Threads
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 !