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,但只要您的业务逻辑强制执行一致性,就没有真正的优势。在本例中,家长非常一致且可重复。一年中同一天的孩子。