--建立測試環境
Create Table TEST
(姓名 Nvarchar(10),
编号 Int,
日 Int,
预定加班 Int,
实际加班 Int)
Insert TEST Select N'张三', 1111, 28, 4, 3
Union All Select N'张三', 1111, 10, 2, 4
Union All Select N'李四', 2222, 15, 3, 5
Union All Select N'王五', 3333, 23, 5, 4
Union All Select N'李四', 2222, 10, 2, 5
GO
--測試
Declare @S1 Nvarchar(4000),@S2 Nvarchar(4000)
Set @S1=''
Set @S2=''
Select @S1=@S1+',Max(Case 日 When '+Rtrim(日)+N' Then 预定加班 Else 0 End) As '''+Rtrim(日)+'''',
@S2=@S2+',Max(Case 日 When '+Rtrim(日)+N' Then 预定加班 Else 0 End) As '''+Rtrim(日)+''''
From TEST Group By 日 Order By 日
EXEC(N'Select 姓名+N''预定'' As 姓名,编号 '+@S1+N'From TEST Group By 姓名+N''预定'',编号 Union All Select 姓名,编号'+@S2+N'From TEST Group By 姓名,编号 Order By 姓名 Desc')
GO
--刪除測試環境
Drop Table TEST
GO
--結果
/*
姓名 编号 10 15 23 28
张三预定 1111 2 0 0 4
张三 1111 2 0 0 4
李四预定 2222 2 3 0 0
李四 2222 2 3 0 0
王五预定 3333 0 0 5 0
王五 3333 0 0 5 0
*/
Select
姓名+N'预定' As 姓名,
编号,
Max(Case 日 When 10 Then 预定加班 Else 0 End) As '10',
Max(Case 日 When 15 Then 预定加班 Else 0 End) As '15',
Max(Case 日 When 23 Then 预定加班 Else 0 End) As '23',
Max(Case 日 When 28 Then 预定加班 Else 0 End) As '28'
From TEST
Group By 姓名+N'预定',编号
Union All
Select
姓名,
编号,
Max(Case 日 When 10 Then 实际加班 Else 0 End) As '10',
Max(Case 日 When 15 Then 实际加班 Else 0 End) As '15',
Max(Case 日 When 23 Then 实际加班 Else 0 End) As '23',
Max(Case 日 When 28 Then 实际加班 Else 0 End) As '28'
From TEST
Group By 姓名,编号
Order By 姓名 Desc