Pivot table row in column

I am using SQLServer2008 Express
. I have a table and a script to convert rows to columns with the expected result in the form

PARENT_ID   name01  name02  name03  name04  
1           ABC     DEF     ABC2    DEF2
2            DEF3    null    null    null

However, I get the result as

PARENT_ID    name01    name02    name03    name04  
1            ABC       DEF       ABC2      DEF2
2            null      null      null      null  

I know that something is wrong with the code, I just can’t understand. Hope someone can help.

CREATE TABLE #temp (
    parent_id            bigint NOT NULL
    ,dependent_id        bigint not null
    ,date_of_birth       date not null
    ,last_name           varchar(100)
    ,first_name           varchar(100)
    ,effective_start_date date
    ,effective_end_Date   date
)  
insert into #temp values (1,1,'1990-10-01','ABC',null,'1989-01-01','9999-12-31')  
insert into #temp values (1,2,'1991-06-02','DEF',null,'1989-01-01','9999-12-31')  
insert into #temp values (1,3,'1992-06-02','ABC2',null,'1989-01-01','9999-12-31')  
insert into #temp values (1,4,'1993-06-02','DEF2',null,'1989-01-01','9999-12-31')  
insert into #temp values (2,5,'2000-06-02','DEF3',null,'1989-01-01','9999-12-31')  

SELECT PARENT_ID  
    ,[1] as name01  
    ,[2] as name02  
    ,[3] as name03  
    ,[4] as name04  
FROM ( SELECT top(100)  percent
    PARENT_ID  
   , dependent_id  
   , (isnull(first_name,'')+last_name) as fullname  
FROM #temp  
where GETDATE() between effective_start_date and effective_end_Date  
order by date_of_birth  
   ) AS piv  
PIVOT ( max(fullname)  
  FOR dependent_id IN ([1], [2], [3], [4])  
  ) AS chld  

Thanks Elmer

+3
source share
1 answer

Something is wrong with the data, and not with the code that I think. You insert 5 as a quality dependent_id, but expect it to appear in a column 1?

Perhaps you can use dependent_id % 4, but I'm not quite sure what this intention is here?

Change . After your comment, I think you need it?

SELECT PARENT_ID  
    ,[1] as name01  
    ,[2] as name02  
    ,[3] as name03  
    ,[4] as name04  
FROM 
(
  SELECT  
    PARENT_ID,
    ROW_NUMBER() OVER (PARTITION BY PARENT_ID ORDER BY date_of_birth) AS RN
   , (isnull(first_name,'')+last_name) as fullname  
FROM #temp  
where GETDATE() between effective_start_date and effective_end_Date  
) AS piv  
PIVOT ( max(fullname)  
  FOR RN IN ([1], [2], [3], [4])  
  ) AS chld  
+2

Source: https://habr.com/ru/post/1757643/


All Articles