Bonjour,
J'ai une table dont une colonne "Numero" a des valeurs à '' (vide) ou null.
Je veux mettre à jour ces valeurs suivant la règle suivante :
Pour un tuple "Source"/"polNb"/"Ccy", prendre la date minimum du champs "DtDebut" (que l'on nommera min(DtDebut) ci-dessous) et appliquer les règles suivantes :
If DtDebut = min(DtDebut) then Numero = 0
If DtDebut = min(DtDebut) + 1 an then Numero = 1
If DtDebut = min(DtDebut) + 2 an then Numero = 2
If DtDebut = min(DtDebut) + 3 an then Numero = 3
etc...

J'ai essayé notamment le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UPDATE MyTable t1
SET t1.Numero = (
	SELECT
	CASE
		WHEN t2.DtDebut = MIN(t2.DtDebut) THEN 0
		WHEN t2.DtDebut = DATEADD(year, 1, MIN(t2.DtDebut)) THEN 1
		WHEN t2.DtDebut = DATEADD(year, 2, MIN(t2.DtDebut)) THEN 2
		WHEN t2.DtDebut = DATEADD(year, 3, MIN(t2.DtDebut)) THEN 3
		--potential need for adding cases here
	END
	FROM MyTable AS t2
	WHERE t1.Source = t2.Source
	AND t1.polNb = t2.polNb
	AND t1.Ccy = t2.Ccy
)
WHERE t1.Numero = '' OR t1.Numero IS NULL;
Mais en plus de ne pas être générique, il me donne l'erreur suivante :
Error in SQL statement: AnalysisException: [MISSING_GROUP_BY] The query does not include a GROUP BY clause. Add GROUP BY or turn it into the window functions using OVER clauses.
Je ne comprends pas le message d'erreur car je n'utilise pourtant que le champs "DtDebut", donc il me semble que je pourrais donc bien utiliser la fonction MIN() dessus
Est-ce que vous voyez comment faire s'il vous plaît pour que ce soit générique et que ça compile ?