我有一张包含以下信息的表
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
我担心的是,我可能会得到一个特定受抚养子女的错误date_of_birth 我是sqlserver的新手,我正在使用sqlexpress(2008)。
非常感谢任何帮助...
谢谢你 埃尔默
答案 0 :(得分:0)
对插入语句进行更正
插入HR_DEPENDENTS(PARENT_ID,DEPENDENT_ID,LAST_NAME,first_name,date_of_birth)
值(100, 1 ,'Ray','First Child',演员('06 / 01/2001'作为日期))
插入HR_DEPENDENTS(PARENT_ID,DEPENDENT_ID,LAST_NAME,first_name,date_of_birth)
值(100, 2 ,'雷','秒',演员('06 / 01/2002'日期))
插入HR_DEPENDENTS(PARENT_ID,DEPENDENT_ID,LAST_NAME,first_name,date_of_birth)
值(100, 3 ,'雷','第三',演员('06 / 01/2003'作为日期))
date_of_birth的年份相差1年。
的问候,
埃尔默
答案 1 :(得分:0)
假设每个新生儿的每个新孩子的依赖身份都会发生变化,您将无法获得与错误姓名相关的错误出生日期。当您旋转表时,您将为该父项的行分配一个值,该值对于给定列是唯一且在枢轴之间一致的。
换句话说,列名[1]表示依赖值1;不会在表之间发生变化,因此当您第二次进行数据透视时,源表中第1行的第一个名称与第1行的birth_date相关联。
我很想使用row_number()函数来确定出生顺序,而不是依赖依赖的id,但只要你的业务逻辑强制实现一致性,就没有真正的优势。