Query per controllo attività

lunedì 09 febbraio 2009 - 23.33

squilibrio Profilo | Expert

Ciao a tutti, ho un problema in una query


CREATE TABLE [dbo].[Attivita](
[IDAttivita] [int] IDENTITY(1,1) NOT NULL,
[IDOwner] [int] 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]

GO
SET ANSI_PADDING OFF

Ogni attività può avere IDAttivitaTipo

M (mail)
T (telefonata)
V (visita)
P (preventivo)
C (chiuso)


e IDAttivitaStato

E (eseguito)
D (da eseguire)



Partendo da un'anagrafica aziende



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]


Vorrei visualizzare tutte le anagrafiche tranne quelle che hanno attività (attenzione potrei avere più attivita dello stesso tipo per ogni singola azienda) di tipo V, P e C (in stato D o E)

Grazie mille

lbenaglia Profilo | Guru

>Vorrei visualizzare tutte le anagrafiche tranne quelle che hanno attività
Quindi in soldoni vuoi recuperare tutte le anagrafiche che non hanno alcuna attività assegnata?

In questo caso puoi risolvere con una banale outer join:

SELECT AN.* FROM dbo.Anagrafica AS AN LEFT JOIN dbo.Attivita AS AT ON AN.IDAnagrafica = AT.IDAnagrafica WHERE AT.IDAttivita IS NULL;

Diversamente posta un esempio completo con la struttura delle tabelle (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set che vuoi ottenere con quei dati.

>Grazie mille
Prego.

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

squilibrio Profilo | Expert

Non voglio visualizzare le anagrafiche che hanno attività di tipo V, P e C ma che potrebbero avere (o non avere) attività di tipo M e T

quindi escludere dal risultato aziende che hanno assegnate attività (una o piu) di tipo V, P e C e invece visualizzare le aziende che hanno (o che potrebbero anche non avere), una o piu, attività di tipo M e T

grazie mille!

lbenaglia Profilo | Guru

>Non voglio visualizzare le anagrafiche che hanno attività di
>tipo V, P e C ma che potrebbero avere (o non avere) attività
>di tipo M e T
>
>quindi escludere dal risultato aziende che hanno assegnate attività
>(una o piu) di tipo V, P e C e invece visualizzare le aziende
>che hanno (o che potrebbero anche non avere), una o piu, attività
>di tipo M e T
Non ho capito niente
Perché non fornisci un esempio completo con alcune righe di prova (INSERT INTO) ed il result set finale che vorresti ottenere con quei dati?

>grazie mille!
Prego.

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

squilibrio Profilo | Expert

Scusa ma per 2 gg non ho accesso al DB

cosa non è chiaro??

ho l'associazione attività con l'azienda di riferimento

io voglio visualizzare SOLO le aziende che hanno attività di tipo M o T o nessun attività

quindi devo escudere le aziende che hanno attività di tipo V, P e C

considerando che ogni azienda può avere più attività associate, quindi

caso 1
azienda con 4 attività di tipo T, V, V, P -> da escludere (il fatto di avere almeno un'attività con un tipo tra V,P e C fa escludere l'azienda)

caso 2
azienda con 3 attività di tipo T, T, M -> da visualizzare

caso 3
azienda con 2 attività di tipo V, P -> da escludere

caso 4
azienda con 1 attività di tipo P -> da escludere

caso 5
azienda con 1 attività di tipo T -> da visualizzare

caso 6
azienda senza attività -> da visualizzare


Spero di essere stato piu chiaro!


Grazie per l'aiuto




lbenaglia Profilo | Guru

>cosa non è chiaro??
Quello che hai scritto.

>io voglio visualizzare SOLO le aziende che hanno attività di
>tipo M o T o nessun attività quindi devo escudere le aziende
>che hanno attività di tipo V, P e C

Boh, senza un esempio completo si brancola nel buio.
Prova a vedere se ti va bene questa soluzione:

SELECT AN.* FROM dbo.Anagrafica AS AN LEFT JOIN dbo.Attivita AS AT ON AN.IDAnagrafica = AT.IDAnagrafica WHERE AT.IDAttivita IS NULL OR AT.IDAttivitaTipo NOT IN('V', 'P', 'C');

>Grazie per l'aiuto
Prego.

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

squilibrio Profilo | Expert

Grazie per l'aiuto ma non mi torna qualche cosa

SELECT AN.*
FROM dbo.Anagrafica AS AN
LEFT JOIN dbo.Attivita AS AT
ON AN.IDAnagrafica = AT.IDAnagrafica
WHERE AT.IDAttivita IS NULL
OR AT.IDAttivitaTipo NOT IN('V', 'P', 'C');


perchè AT.IDAttivita IS NULL ??? cosa c'entra IDAttività??

Ho provato a togliere quest'ultima condizione...

SELECT AN.*
FROM dbo.Anagrafica AS AN
LEFT JOIN dbo.Attivita AS AT
ON AN.IDAnagrafica = AT.IDAnagrafica
WHERE AT.IDAttivitaTipo NOT IN('V', 'P', 'C');

e lanciando la query mi visualizza, per esempio, un cliente che ha due attività associate una V ed una T

quindi dovrebbe essere escluso


Grazie per l'aiuto

lbenaglia Profilo | Guru

>perchè AT.IDAttivita IS NULL ??? cosa c'entra IDAttività??
Perché è la condizione che ti restituisce i clienti senza alcuna attività.

>Ho provato a togliere quest'ultima condizione...
>
>SELECT AN.*
>FROM dbo.Anagrafica AS AN
>LEFT JOIN dbo.Attivita AS AT
>ON AN.IDAnagrafica = AT.IDAnagrafica
>WHERE AT.IDAttivitaTipo NOT IN('V', 'P', 'C');
>
>e lanciando la query mi visualizza, per esempio, un cliente che
>ha due attività associate una V ed una T
>
>quindi dovrebbe essere escluso
>
>
>Grazie per l'aiuto
Prego, ma se non posti l'esempio che ti ho chiesto il mio aiuto termina con questo messaggio

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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