问一个SQL语句,不知道怎么写。谢谢大家!

hzh_wen_x 2006-05-29 05:45:37
姓名 编号 日 预定加班 实际加班
张三 1111 28 4 3
张三 1111 10 2 4
李四 2222 15 3 5
王五 3333 23 5 4
李四 2222 10 2 5
.......

统计结果为:
姓名 编号 10 15 23 28 ...........
张三(预定) 1111 2 0 0 4
张三 1111 4 0 0 3
李四(预定) 2222
李四 2222
王五(预定) 3333
王五 3333
...全文
131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangang 2006-05-29
  • 打赏
  • 举报
回复
mark
paoluo 2006-05-29
  • 打赏
  • 举报
回复
姓名不確定就用動態語句

--建立測試環境
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
*/

paoluo 2006-05-29
  • 打赏
  • 举报
回复
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

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧