Gestione attività associate ad un'anagrafica e visualizzazione con con...

domenica 15 giugno 2008 - 14.45

squilibrio Profilo | Expert

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
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