Bonjour.

Sous SSAS, j'ai une Named Query qui utilise un UNION pour récupérer 3 champs dans 2 tables.
Je souhaiterais :
- remplacer cette Named Query par une vue SQL indexée pour gagner en perf (je l'espère) donc pas d'utilisation de l'instruction UNION
- que les couples des 3 valeurs soit unique pour faire une unique clusterd key dessus
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
CREATE TABLE t1 (
	[pk] [int] IDENTITY(1, 1) NOT NULL
	,[id] [varchar](23) NULL
	,[idSociete] [smallint] NULL
	,[idExercice] [smallint] NULL
	,CONSTRAINT [PK_t1] PRIMARY KEY NONCLUSTERED ([pk] ASC)
	) ON [PRIMARY]
 
CREATE TABLE t2 (
	[pk] [int] IDENTITY(1, 1) NOT NULL
	,[idTransaction] [varchar](23) NULL
	,[idSocieteEmettrice] [smallint] NULL
	,[idExercice] [smallint] NULL
	,CONSTRAINT [PK_t2] PRIMARY KEY NONCLUSTERED ([pk] ASC)
	) ON [PRIMARY]
 
INSERT INTO t1 (
	[id]
	,[idSociete]
	,[idExercice]
	)
VALUES (
	'aa-b'
	,1
	,1314
	)
	,(
	'aa-c'
	,1
	,1314
	)
	,(
	'aa-c'
	,1
	,1314
	)
 
INSERT INTO t2 (
[idTransaction ]
	,[idSocieteEmettrice]
	,[idExercice]
	)
VALUES (
	'aa-d'
	,1
	,1314
	)
	,(
	'aa-b'
	,1
	,1314
	)
	,(
	'aa-c'
	,1
	,1314
	) (
	'aa-d'
	,1
	,1314
	)
Je peux donc avoir des doublons à l’intérieur d'une table et de l'une à l'autre.

Je souhaite donc en résultat:
id, idSociete, idExercice
'aa-b',1,1314
'aa-c',1,'1314
'aa-d',1,1314
J'ai donc fais:
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
17
18
19
20
21
22
23
24
25
SELECT DISTINCT id
	,idSociete
	,idExercice
FROM (
	SELECT CASE 
			WHEN t2.idTransaction IS NOT NULL
				THEN t2.idTransaction
			ELSE t1.id
			END AS id
		,CASE 
			WHEN t2.idSocieteEmettrice IS NOT NULL
				THEN t2.idSocieteEmettrice
			ELSE t1.idSociete
			END AS idSociete
		,CASE 
			WHEN t2.idExercice IS NOT NULL
				THEN t2.idExercice
			ELSE t1.idExercice
			END AS idExercice
	FROM tabTransaction t1
	LEFT JOIN tabPassage t2
		ON t1.id = t2.idTransaction
			AND t1.idSociete = t2.idSocieteEmettrice
			AND t1.idExercice = t2.idExercice
	) AS t3
Il me semble que ça fonctionne, mais est-ce le plus performant? (Mise à part l'utilisation de clé alternatives pour ne pas avoir de type char en clé)

Merci.
sdisp