2010-07-15 83 views
1

我有以下信息TSQL行到塔(樞軸)

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)。

任何幫助,高度讚賞...

謝謝
埃爾默在INSERT語句

+0

在這個例子中,父母是非常一致和可重複的。一個孩子在一年的同一天。 – Kashif 2010-07-15 09:34:13

回答

0

修正

INSERT INTO HR_DEPENDENTS(PARENT_ID,DEPENDENT_ID,LAST_NAME,FIRST_NAME,DATE_OF_BIRTH)
值(100,,'Ray','First Child',cast('06/01/2001'as date))

插入到HR_DEPENDENTS(PARENT_ID,DEPENDENT_ID,姓氏,如first_name,DATE_OF_BIRTH)
值(100,, '雷', '第二',澆鑄('06/01/2002'as日期))

插入到HR_DEPENDENTS(PARENT_ID,DEPENDENT_ID,姓氏,如first_name,DATE_OF_BIRTH)
值(100,, '雷', '第三',澆鑄('06/01/2003' 作爲日期))

date_of_birth的年份相差1年。

問候,
埃爾默

+0

在問題中更新了您的插入內容。 – 2011-02-05 05:13:18

0

假設每個新組的孩子每個parentId的依賴ID改變,你不會得到與錯誤的名稱相關聯的出生日期是錯誤的。當您旋轉表格時,您將爲該父表格的行分配一個值,使其與給定列之間唯一且一致。

換句話說,列名[1]代表依賴性值1;這不會在每個表格中發生變化,所以當您第二次旋轉時,源表格中第一行的名字與第一行的birth_date相關聯。

我會試圖使用row_number()函數來確定出生順序而不是依賴於依賴ID,但只要您的業務邏輯實施一致性,就沒有真正的優勢。