Сводка не дает ожидаемого результата - PullRequest
0 голосов
/ 21 марта 2019

Я использую pivot и unpivot, но получаю ожидаемый результат

Вот мой пример набора данных

Таблица 1

id    c_code
-----------------
123     1
456     1

Таблица 2

id   c_code   i_t_code   i_code  
----------------------
123     1     TWinc     10              
123     1     TBinc     20      
123     1     TSinc     30      

Таблица 3

i_code   i_t_code   i_name 
------------------------------
10        TWinc        abc         
20        TBinc        xyz
30        TSinc        pqr

Вот мой запрос

Запрос

select * from (
    select id,inc,i_t_code from (
        select a.id,b.i_name,cast(b.i_code AS                        
        VARCHAR(128)) as i_code,b.i_t_code
        from 
        table_1 a
        join 
        table_2 b 
        on a.id= b.id
        and 
        a.c_code = b.c_code 
        join
        tabl_3 c on c.i_code = b.i_code 
        and 
        c.i_t_code = b.i_t_code 

        on a.i_code = b.i_code 
) d 
Unpivot
(
 inc for details in (i_name,i_code)
) as unpt) as uppt_res
PIVOT
(
   max(inc)
   FOR [i_t_code] IN ([TWinc],[TBinc],[TSinc])
) AS P

Ожидаемый результат:

id        TWinc_n   TWinc_c  TBinc_n  TBinc_c   TSinc_n   TSinc_c
------------------------------------------------------------
123         abc       10       xyz     20        pqr      30

Фактическая выработка:

 id         TWinc    TBinc   TSinc   
------------------------------------
123          abc      xyz     pqr   

Как это сделать ??

Возможно использование pivot или любого другого решения

Может кто-нибудь помочь исправить это?

1 Ответ

0 голосов
/ 21 марта 2019

Вам придется внести некоторые изменения в ваши данные, если вы хотите, чтобы pivot не сжимал одинаковые элементы данных при преобразовании данных строки в имена столбцов и выборе max(inc) - вероятно, это проще всего сделать, изменив содержимое. из непивотных данных, привязка по номеру строки:

SELECT * FROM
(
   select stoneid, inc, CONCAT(inclusion_type_id, ROW_NUMBER()OVER(PARTITION BY inclusion_type_id ORDER BY inc)) as inclusion_type_id FROM
   (
       select 
           a.stoneid,
           b.inclusion_name,
           cast(b.inclusion_code AS VARCHAR(128)) as     inclusion_code,
           b.inclusion_type_id,
           b.inclusion_type_code  
       from 
           PACKET.STONE_LAB_INCLUSIONS a
           inner join 
           MASTER.INCLUSION_MASTER b 
           on 
               a.inclusion_code = b.inclusion_code and 
               a.inclusion_type_code = b.inclusion_type_code

           inner join 
           packet.stone_details c 
           on 
               c.stoneid = a.stoneid  and 
               c.certificate_code = a.certificate_code 
   ) d 
   UNPIVOT(inc for details in (inclusion_name,inclusion_code)) as unpt
) uppt_res
PIVOT
(
   MAX(inc)
   FOR [inclusion_type_id] IN ([TWinc1],[TWinc2],[TBinc1],[TBinc2],[TSinc1],[TSinc2])
) AS P

Если вы отчаянно хотите иметь одинаковые имена столбцов, вы можете использовать псевдонимы результатов этого запроса вместо select *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...