Sql 用户可选择时间表的表格设计和使用PIVOT选择
我正在创建一个日程安排应用程序,允许员工输入存储在表中的所需日程安排。下面是使用SQL2008R2的当前设计Sql 用户可选择时间表的表格设计和使用PIVOT选择,sql,sql-server-2008,pivot,Sql,Sql Server 2008,Pivot,我正在创建一个日程安排应用程序,允许员工输入存储在表中的所需日程安排。下面是使用SQL2008R2的当前设计 CREATE TABLE [dbo].[Schedule] ( [EmpNum] [varchar](10) NOT NULL, [Start] [datetime] NOT NULL, [Length] [decimal](18, 2) NOT NULL, [Reason] [varchar](1) NOT NULL, CONSTRAINT [
CREATE TABLE [dbo].[Schedule] (
[EmpNum] [varchar](10) NOT NULL,
[Start] [datetime] NOT NULL,
[Length] [decimal](18, 2) NOT NULL,
[Reason] [varchar](1) NOT NULL,
CONSTRAINT [PK_Schedule] PRIMARY KEY CLUSTERED
(
[EmpNum] ASC,
[Start] ASC
)
)
需要注意的几件事
- 用户可能没有输入特定日期范围的计划,但仍希望看到其姓名列表中没有计划
- 用户可以不为一周中的某一天选择任何内容,但为其他日期选择某些内容
- 开始是班次的开始
- Length是班次的小时数,每天和每个人的班次可能会有很大差异
- 原因列用于用户选择的内容(W-Work、P-PTO等)
EmpNum Start Length Reason
---------- ----------------------- --------------------------------------- ------
000001 2012-08-02 09:00:00.000 12.00 W
000001 2012-08-04 08:00:00.000 9.50 P
000002 2012-08-02 08:30:00.000 10.00 W
000002 2012-08-03 19:00:00.000 12.00 W
000003 2012-08-03 08:00:00.000 8.00 P
我想要的输出是这样的
EmpNum [0] [1] [2] [3] [4] [5] [6]
---------- ------ ------ ------ ------ ------ ------ ------
000001 NULL NULL NULL NULL W NULL P
000002 NULL NULL NULL NULL W W NULL
000003 NULL NULL NULL NULL NULL P NULL
自从我们刚刚从SQL 2000升级以来,我从未使用过PIVOT
查询,所以请耐心听我说。我已经构建了下面的查询,但由于下面的错误而失败,我被卡住了
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near '('.
质疑
关于如何最好地实现这一点,或者我在这里的错误有多严重,您有什么想法吗?看起来您正在尝试根据第1-7周的某一天来调整数据。我建议对此稍作修改以使其正常工作:
SELECT *
FROM
(
select EmpNum,
reason,
datepart(dw, start) as DyOfWk
from #Schedule
) s
pivot (
max(Reason)
for dyofwk in ([1], [2], [3], [4], [5], [6], [7])
) as Pvt
看
结果:
工作得很好。我相信我现在明白这些是怎么工作的了。谢谢你的快速帮助。
SELECT *
FROM
(
select EmpNum,
reason,
datepart(dw, start) as DyOfWk
from #Schedule
) s
pivot (
max(Reason)
for dyofwk in ([1], [2], [3], [4], [5], [6], [7])
) as Pvt