SQL Server 2008 PIVOT и JOIN - PullRequest
       7

SQL Server 2008 PIVOT и JOIN

0 голосов
/ 25 ноября 2018

У меня есть 3 таблицы с данными:

ТАБЛИЦА 1: Тип

IdType  LibelleType
-------------------
  1         Type1
  2         Type2

ТАБЛИЦА 2: Процедура

IdProcedur    LibelleProcedure
-------------------------------
    1         Procedure1
    2         Procedure2

ТАБЛИЦА 3: ИНФОРМАЦИЯ

IdInfo    IdType    IdProcedure    InfoValue
------------------------------------------------
   1         1          1               11
   2         1          2               12
   3         2          1               21
   4         2          2               22

Мне нужен запрос, который выдаст такой вывод:

         Procedure1   Procedure2
Type1        11           12
Type2        21           22

Спасибо!

1 Ответ

0 голосов
/ 25 ноября 2018

Пожалуйста, проверьте ниже.Последний выбор делает разворот. (Мои предыдущие запросы просто для подготовки набора данных)

        create table Type
(IDType INT,Label VARCHAR(100)
)
create table [PROC]
(IDProc INT, LabelProc varchar(100))
Create table INFO
(IDInfo INT, IDType INT, IDProc INT, INFOValue INT)

insert into Type
values(1,'Type1'),(2,'Type2')

insert into [PROC]
values(1,'Proc1'),(2,'Proc2')

insert into InFO
values(1,1,1,11),(2,1,2,12),(3,2,1,21),(4,2,2,22)

select * from Type
select * from [PROC]
select * from info

declare @labelforprocs varchar(max) = ''
,@sql NVARCHAR(MAX)
select @labelforprocs = CONCAT(@labelforprocs,QUOTENAME(LabelProc),',') from [PROC]
select @labelforprocs = LEFT(@labelforprocs,LEN(@labelforprocs)-1)
SET @sql = 
'select * from
        (
            select T.Label,P.LabelProc,I.INFOValue from INFO I
            INNER JOIN [PROC] P
            ON I.IDPROC = P.IDProc
            INNER JOIN TYPE T
            on T.IDType = I.IDType
        )SRC
        PIVOT
        (MAX(INFOValue)
        FOR LabelProc in (' + @labelforprocs +
        '))piv'
EXEC sp_executesql @sql

enter image description here

...