从现有 table 创建新的 SQL 服务器 table
Creating a new SQL Server table from an existing table
我的工作是更新数据库 table,方法是删除月份列并重新创建 table 列字段分组并对小时列求和。
这是我的说明:"Create a new PS_StaffHours table without the Month column. Migrate the existing PS_StaffHours data to the new table by grouping on (PSScnID/PSEmpID/Prd/WBSID/RatePrd) and summing the hours."
现在这是 table 我编写的脚本,必须在没有月份列和小时列求和的情况下重新创建:
CREATE TABLE [dbo].[PS_StaffHours]
(
[PSScnID] [int] NOT NULL,
[PSEmpID] [int] NOT NULL,
[Prd] [int] NOT NULL,
[WBSID] [int] NOT NULL,
[RatePrd] [int] NOT NULL,
[Month] [date] NOT NULL,
[Hours] [decimal](16, 8) NOT NULL,
CONSTRAINT [PK_PS_StaffHours]
PRIMARY KEY CLUSTERED ([PSScnID] ASC, [PSEmpID] ASC, [Prd] ASC,
[WBSID] ASC, [RatePrd] ASC, [Month] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [FK_PS_StaffHours_PS_Scenarios]
FOREIGN KEY([PSScnID]) REFERENCES [dbo].[PS_Scenarios] ([PSScnID])
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [FK_PS_StaffHours_PS_Scenarios]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [FK_PS_StaffHours_PS_Staff]
FOREIGN KEY([PSScnID], [PSEmpID]) REFERENCES [dbo].[PS_Staff] ([PSScnID], [PSEmpID])
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [FK_PS_StaffHours_PS_Staff]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [FK_PS_StaffHours_PS_WBS]
FOREIGN KEY([PSScnID], [WBSID]) REFERENCES [dbo].[PS_WBS] ([PSScnID], [WBSID])
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [FK_PS_StaffHours_PS_WBS]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [CK_PS_StaffHours] CHECK ((DATEPART(day, [Month]) = (1)))
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [CK_PS_StaffHours]
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Restricts Month field to the 1st of every month.' ,
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'PS_StaffHours',
@level2type = N'CONSTRAINT', @level2name = N'CK_PS_StaffHours'
GO
首先,要创建新的 table 我想我所要做的就是重命名脚本的 CREATE 部分中的 table 名称,然后删除对月列的所有引用创建语句。我对 CREATE 脚本的看法是否正确?
现在,这是我要用来填充没有月份字段的 table 的脚本,但我不确定我的分组是否正确,因为我收到错误消息,因为我' m 不 grouping
与其余部分一起出现在“小时”列中。另外,我不确定如何处理 summing
查询中的时间。
我的代码:
SELECT c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd, c.Hours
INTO dbo.NewPS_StaffHours
FROM PS_StaffHours AS c
GROUP BY c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd
GO
你的第一个假设是正确的。
要按您的列分组并总结时间 - 试试这个:
SELECT c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd, SUM(c.Hours) AS Hours
INTO dbo.NewPS_StaffHours
FROM PS_StaffHours AS c
GROUP BY c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd
GO
听起来您将在 运行 您的 select 之前创建您的 table。
所以去掉 INTO dbo.NewPS_StaffHours
。 运行 创建 table 语句然后 INSERT INTO newTable VALUES... SELECT
我的工作是更新数据库 table,方法是删除月份列并重新创建 table 列字段分组并对小时列求和。
这是我的说明:"Create a new PS_StaffHours table without the Month column. Migrate the existing PS_StaffHours data to the new table by grouping on (PSScnID/PSEmpID/Prd/WBSID/RatePrd) and summing the hours."
现在这是 table 我编写的脚本,必须在没有月份列和小时列求和的情况下重新创建:
CREATE TABLE [dbo].[PS_StaffHours]
(
[PSScnID] [int] NOT NULL,
[PSEmpID] [int] NOT NULL,
[Prd] [int] NOT NULL,
[WBSID] [int] NOT NULL,
[RatePrd] [int] NOT NULL,
[Month] [date] NOT NULL,
[Hours] [decimal](16, 8) NOT NULL,
CONSTRAINT [PK_PS_StaffHours]
PRIMARY KEY CLUSTERED ([PSScnID] ASC, [PSEmpID] ASC, [Prd] ASC,
[WBSID] ASC, [RatePrd] ASC, [Month] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [FK_PS_StaffHours_PS_Scenarios]
FOREIGN KEY([PSScnID]) REFERENCES [dbo].[PS_Scenarios] ([PSScnID])
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [FK_PS_StaffHours_PS_Scenarios]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [FK_PS_StaffHours_PS_Staff]
FOREIGN KEY([PSScnID], [PSEmpID]) REFERENCES [dbo].[PS_Staff] ([PSScnID], [PSEmpID])
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [FK_PS_StaffHours_PS_Staff]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [FK_PS_StaffHours_PS_WBS]
FOREIGN KEY([PSScnID], [WBSID]) REFERENCES [dbo].[PS_WBS] ([PSScnID], [WBSID])
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [FK_PS_StaffHours_PS_WBS]
GO
ALTER TABLE [dbo].[PS_StaffHours] WITH CHECK
ADD CONSTRAINT [CK_PS_StaffHours] CHECK ((DATEPART(day, [Month]) = (1)))
GO
ALTER TABLE [dbo].[PS_StaffHours] CHECK CONSTRAINT [CK_PS_StaffHours]
GO
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = N'Restricts Month field to the 1st of every month.' ,
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'PS_StaffHours',
@level2type = N'CONSTRAINT', @level2name = N'CK_PS_StaffHours'
GO
首先,要创建新的 table 我想我所要做的就是重命名脚本的 CREATE 部分中的 table 名称,然后删除对月列的所有引用创建语句。我对 CREATE 脚本的看法是否正确?
现在,这是我要用来填充没有月份字段的 table 的脚本,但我不确定我的分组是否正确,因为我收到错误消息,因为我' m 不 grouping
与其余部分一起出现在“小时”列中。另外,我不确定如何处理 summing
查询中的时间。
我的代码:
SELECT c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd, c.Hours
INTO dbo.NewPS_StaffHours
FROM PS_StaffHours AS c
GROUP BY c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd
GO
你的第一个假设是正确的。 要按您的列分组并总结时间 - 试试这个:
SELECT c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd, SUM(c.Hours) AS Hours
INTO dbo.NewPS_StaffHours
FROM PS_StaffHours AS c
GROUP BY c.PSScnID, c.PSEmpID, c.Prd, c.WBSID, c.RatePrd
GO
听起来您将在 运行 您的 select 之前创建您的 table。
所以去掉 INTO dbo.NewPS_StaffHours
。 运行 创建 table 语句然后 INSERT INTO newTable VALUES... SELECT