Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server tsql行到列(轴)_Sql Server_Tsql_Pivot - Fatal编程技术网

Sql server tsql行到列(轴)

Sql server tsql行到列(轴),sql-server,tsql,pivot,Sql Server,Tsql,Pivot,我有一张有以下信息的桌子 CREATE TABLE [dbo].[HR_DEPENDENTS]( [PARENT_ID] [bigint] NOT NULL, [DEPENDENT_ID] [bigint] NOT NULL, [LAST_NAME] [varchar](100) NOT NULL, [FIRST_NAME] [varch

我有一张有以下信息的桌子

CREATE TABLE [dbo].[HR_DEPENDENTS](  
            [PARENT_ID]     [bigint]       NOT NULL,  
            [DEPENDENT_ID]  [bigint]       NOT NULL,  
            [LAST_NAME]     [varchar](100) NOT NULL,  
            [FIRST_NAME]    [varchar](100)     NULL,  
            [DATE_OF_BIRTH] [date]             NULL)  

insert into HR_DEPENDENTS (PARENT_ID, DEPENDENT_ID, LAST_NAME, first_name, date_of_birth)
values (100, 1, 'Ray', 'First Child',cast('06/01/2001' as date))

insert into HR_DEPENDENTS (PARENT_ID, DEPENDENT_ID, LAST_NAME, first_name, date_of_birth)
values (100, 2, 'Ray', 'Second', cast('06/01/2002'as date))

insert into HR_DEPENDENTS (PARENT_ID, DEPENDENT_ID, LAST_NAME, first_name, date_of_birth)
values (100, 3, 'Ray', 'Third',cast('06/01/2003' as date)) 
我使用了下面的sql

SELECT t01.parent_id  
    ,t01.taxdepn1  
    ,t01.taxdepn2  
    ,t01.taxdepn3  
    ,t01.taxdepn4  
    ,t02.depn1bday  
    ,t02.depn2bday  
    ,t02.depn3bday  
    ,t02.depn4bday  
FROM (SELECT PARENT_ID  
    ,[1] as taxdepn1  
    ,[2] as taxdepn2  
    ,[3] as taxdepn3  
    ,[4] as taxdepn4  
    FROM ( SELECT PARENT_ID  
         , dependent_id  
         , first_name+' '+last_name as fullname  
         FROM  dbo.hr_dependents 
         ) AS piv  
    PIVOT ( max(fullname)  
            FOR dependent_id IN ([1], [2], [3], [4])  
          ) AS chld  
    ) T01
    ,(SELECT PARENT_ID2  
            , [1] as depn1bday  
            , [2] as depn2bday  
            , [3] as depn3bday  
            , [4] as depn4bday  
      FROM ( SELECT PARENT_ID as parent_id2  
                   ,dependent_id  
                   ,date_of_birth  
             FROM dbo.hr_dependents ) AS piv1  
      PIVOT ( min(date_of_birth)  
              FOR dependent_id IN ([1], [2], [3], [4])  
            ) AS chld1  
      ) T02  
WHERE T01.PARENT_ID=T02.PARENT_ID2  
我担心的是,我可能会弄错某个受抚养孩子的出生日期。
我是sqlserver新手,正在使用sqlexpress(2008)

非常感谢您的帮助

谢谢你

Elmer对insert语句的更正

插入人力资源受抚养人(父母ID、受抚养人ID、姓、名、出生日期)
值(100,1,,“光线”,“第一个孩子”,演员阵容('06/01/2001'截止日期))

插入人力资源受抚养人(父母ID、受抚养人ID、姓、名、出生日期)
值(100,2,,“光线”,“第二次”,演员阵容('06/01/2002'截止日期))

插入人力资源受抚养人(父母ID、受抚养人ID、姓、名、出生日期)
值(100,3,,“光线”,“第三次”,演员阵容('06/01/2003'截止日期))

出生日期的年份相差1年

问候,

Elmer

假设每个parentid的每一组新孩子的从属id都发生了变化,那么您就不会得到与错误姓名相关联的错误出生日期。当您旋转表时,您是在为该父级的行指定一个值,该值被指定给给定的列,该列在数据透视之间是唯一且一致的

换句话说,列名[1]表示dependentid值1;这不会随着表的变化而改变,因此当您第二次透视时,源表中第1行的名字与第1行的出生日期相关联


我很想使用row_number()函数来确定出生顺序,而不是依赖于依赖id,但只要您的业务逻辑强制执行一致性,就没有真正的优势。

在本例中,家长非常一致且可重复。一年中同一天的孩子。