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
Je peux donc avoir des doublons à l’intérieur d'une table et de l'une à l'autre.
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 souhaite donc en résultat:
J'ai donc fais:id, idSociete, idExercice
'aa-b',1,1314
'aa-c',1,'1314
'aa-d',1,1314
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é)
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
Merci.
sdisp
Partager