Mi sembra troppo facile ma le cose troppo
facili spesso nascondono qualcosa
Comunque se la tabella è questa
codice:
CREATE TABLE [dbo].[Ta](
[Id] [int] IDENTITY(1,1) NOT NULL,
[cognome] [nchar](10) NULL,
[tipo1] [nchar](10) NULL,
[valore1] [nchar](10) NULL,
[tipo2] [nchar](10) NULL,
[valore2] [nchar](10) NULL
) ON [PRIMARY]
io farei un raggruppamento sul " cognome "
e un Max sugli altri 4 campi
_______________________________________________
partendo dal presupposto
1°) che ci siano al massimo 2 cognomi uguali
e presupponendo anche che per ogni gruppo di cognomi
2°) ci sia al massimo 1 valore di " tipo1 "
3°) ci sia al massimo 1 valore di " valore1 "
4°) ci sia al massimo 1 valore di " tipo2 "
5°) ci sia al massimo 1 valore di " valore2 "
Omettiamo di chiederci se per ogni gruppo
"tipo1" è scritto sullo stesso record di "valore1"
ecc
_______________________________________________
La query potrebbe quindi essere:
codice:
SELECT
cognome,
MAX(tipo1) AS MT1,
MAX(valore1) AS MV1,
MAX(tipo2) AS MT2,
MAX(valore2) AS MV2,
CASE WHEN COUNT(cognome) > 2 THEN 1 ELSE 0 END
+
CASE WHEN COUNT(tipo1) > 1 THEN 1 ELSE 0 END
+
CASE WHEN COUNT(valore1) > 1 THEN 1 ELSE 0 END
+
CASE WHEN COUNT(tipo2) > 1 THEN 1 ELSE 0 END
+
CASE WHEN COUNT(valore2) > 1 THEN 1 ELSE 0 END
AS Erroor
FROM dbo.Ta
GROUP BY cognome
Dove l'ultimo campo ( Erroor ) verifica i presupposti
e restituisce un valore di errore variabile
__ fra 0 ( se va tutto bene )
__ e 5 ( se tutti i presupposti non sono verificati )
__________________________________________________ ____
Se ritieni puoi eliminare il campo " Erroor "
cosi la query si semplifica notevolmente
Saluti