3 Stimmen

Pivot-Tabelle Zeile zu Spalte

Ich verwende SQLServer2008 Express
Ich habe eine Tabelle und ein Skript zum Konvertieren der Zeilen in Spalten mit dem erwarteten Ergebnis als

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

Ich erhalte jedoch das folgende Ergebnis

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

Ich weiß, dass mit dem Code etwas nicht stimmt, ich kann es nur nicht herausfinden. Hoffe, jemand kann helfen.

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  

Danke Elmer

2voto

Martin Smith Punkte 417623

Ich glaube, es liegt eher an den Daten als am Code. Sie fügen 5 als die dependent_id aber in der Erwartung, dass es in der 1 Spalte?

Sie könnten vielleicht verwenden dependent_id % 4 aber ich bin mir nicht ganz sicher, was hier beabsichtigt ist?

編集 Nach Ihrem Kommentar denke ich, dass Sie das brauchen?

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X