Bonjour à tous ,
J'aimerais savoir s'il est possible de regrouper des tables (qui possède les même champs) mais avec un résultat en colonnes.
Voici la définition de deux des tables :
Actuellement je les regroupes dans une vue de manière relativement simple avec un UNION ALL et deux INNER JOIN en plus sur deux tables complémentaires :
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 /* Table 1 */ CREATE TABLE [dbo].[MO_Fabrication]( [IdOuvrage] [int] NOT NULL, [Famille] [tinyint] NOT NULL, [Temps] [decimal](10, 4) NOT NULL, CONSTRAINT [PK_MO_Fabrication] PRIMARY KEY CLUSTERED ( [IdOuvrage] ASC, [Famille] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[MO_Fabrication] WITH CHECK ADD CONSTRAINT [FK_MO_Fabrication_Ouvrage] FOREIGN KEY([IdOuvrage]) REFERENCES [dbo].[Ouvrage] ([ID]) GO ALTER TABLE [dbo].[MO_Fabrication] CHECK CONSTRAINT [FK_MO_Fabrication_Ouvrage] GO /* Table 2 */ CREATE TABLE [dbo].[MO_Dessin]( [IdOuvrage] [int] NOT NULL, [Famille] [tinyint] NOT NULL, [Temps] [decimal](10, 4) NOT NULL, CONSTRAINT [PK_MO_Dessin] PRIMARY KEY CLUSTERED ( [IdOuvrage] ASC, [Famille] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[MO_Dessin] WITH CHECK ADD CONSTRAINT [FK_MO_Dessin_Ouvrage] FOREIGN KEY([IdOuvrage]) REFERENCES [dbo].[Ouvrage] ([ID]) GO ALTER TABLE [dbo].[MO_Dessin] CHECK CONSTRAINT [FK_MO_Dessin_Ouvrage] GO
Mais je souhaiterais les regrouper en colonnes, c'est à dire avoir quelque chose comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT d.CodeChantier, d.Code, o.Repere, o.Quantite, o.Unite, MO.Temps, MO.Type FROM ( SELECT IdOuvrage, Temps, Type FROM (SELECT fab.IdOuvrage, fab.Temps, f.Libelle AS Type FROM dbo.MO_Fabrication AS fab INNER JOIN dbo.Famille AS f ON f.Id = fab.Famille) AS Fabrication UNION ALL SELECT IdOuvrage, Temps, Type FROM (SELECT dessin.IdOuvrage, dessin.Temps, 'BE' AS Type FROM dbo.MO_Dessin AS dessin INNER JOIN dbo.Famille AS f ON f.Id = dessin.Famille) AS MO INNER JOIN dbo.Ouvrage AS o ON o.ID = MO.IdOuvrage INNER JOIN dbo.Devis AS d ON d.Code = o.CodeDevis
A savoir qu'il ne peut pas y avoir plus d'une ligne pour un Ouvrage dans les Tables à liées, par contre il peux ne pas y avoir de lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Devis.CodeChantier | Devis.Code | Ouvrage.Repere | Table1_Qte | Table1_Temps | Table2_Qte | Table2_Temps | ..... TableX_Qte | TableX_Temps
Dans ce cas on mettrai la quantité et le temps à 0.
Est-ce possible ?
Merci à vous
PS : Définition des tables Ouvrage et Devis si besoin :
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 CREATE TABLE [dbo].[Ouvrage]( [ID] [int] IDENTITY(1,1) NOT NULL, [CodeDevis] [nvarchar](15) NOT NULL, [IdTranche] [nvarchar](4) NOT NULL, [Libelle] [nvarchar](255) NOT NULL, [Repere] [nvarchar](50) NOT NULL, [Famille] [tinyint] NOT NULL, [Quantite] [decimal](10, 4) NOT NULL, [Unite] [nvarchar](5) NOT NULL, [Temps] [decimal](10, 4) NOT NULL, CONSTRAINT [PK_Ouvrages] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Devis]( Code [nvarchar](15) NOT NULL, [CodeChantier] [nvarchar](8) NOT NULL, [Libelle] [nvarchar](255) NOT NULL, CONSTRAINT [PK_Devis] PRIMARY KEY CLUSTERED ( Code ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
Partager