我需要从“Employees”表的“EmployeeID”列中收集值,并将它们插入“Incident”表的“EmployeeID”列中。 最后,“EmployeeID”列的行中的值应随机排列。
更确切地说; 我用他们的ID创建了10名员工,从1到10。 那些员工,实际上是ID,应该接收随机事件。 所以......所有事件都有10个ID可以传播 - 可能是1000个。
我该怎么做?
这只适用于当地机器的个人运动。 我用Google搜索,但没有找到我问题的明确答案。
对于你的冠军应该很容易解决。 :) 请问有人帮帮我吗?
注意:
1)我已经在“事件”表中创建了一个名为“EmployeeID”的列,因此我需要一个更新语句,不是吗?
2)架构:
[dbo].[EmployeeType]
[dbo].[Company]
[dbo].[Division]
[dbo].[Team]
[dbo].[sysdiagrams]
[dbo].[Incident]
[dbo].[Employees]
3)1。预解决方案:
CREATE TABLE IncidentToEmployee
(
IncidentToEmployeeID BIGINT IDENTITY(1,1) NOT NULL,
EmployeeID BIGINT NULL,
Incident FLOAT NULL
PRIMARY KEY CLUSTERED (IncidentToEmployeeID)
)
INSERT INTO IncidentToEmployee
SELECT
EmployeeID,
Incident
FROM dbo.Employees,
dbo.Incident
ORDER BY NEWID()
SELECT * FROM IncidentToEmployee
GO
3)2。INNER JOIN ON输出
如果您想知道“别名”栏目; 没有人真正知道身份证背后的人 - 这就是我使用Alias专栏的原因。
SELECT Employees.Alias,
IncidentToEmployee.Incident
FROM Employees
INNER JOIN
IncidentToEmployee ON
Employees.EmployeeID = IncidentToEmployee.EmployeeID
ORDER BY Alias
4)最终解决方案
正如我所提到的,我首先在我的“事件”表中添加了一个名为“EmployeeID”的列。这就是为什么我最初不能使用INSERT INTO语句而必须使用UPDATE语句。我现在找到了最合适的解决方案 - 而不像我作为预解决方案那样创建新表。 看看下面的代码:
ALTER Table Incident
ADD EmployeeID BIGINT NULL
UPDATE Incident
SET Incident.EmployeeID = EmployeeID
FROM Incident INNER JOIN Employees
ON Incident = EmployeeID
SELECT
EmployeeID,
Incident
FROM dbo.Employees,
dbo.Incident
ORDER BY NEWID()
谢谢大家的帮助 - 我认为需要花费更长的时间才能找到解决方案;但我终于成功了。谢谢!
答案 0 :(得分:0)
手写,所以可能需要调整语法,但是这样的事情应该这样做。除非播种,否则Rand()函数将给出相同的值,因此您可以看到类似日期的内容以获得随机性。
Insert Into Incidents
Select Top 10
EmployeeID
From Employees
Order By
Rand(GetDate())
答案 1 :(得分:0)
更新
我认为您需要为不同的用户分配不同的任务,更好的方法是创建一个新表,让我们说EmployeeIncidents
具有列Id(主要),EmployeeID和IncidentID。
现在您可以将随机EmployeesID和随机IncidentID插入到新表中,这样您也可以保留记录, 更新事件表不是明智的选择。
INSERT INTO EmployeeIncidents
SELECT TOP ( 10 )
EmployeesID ,
IncidentID
FROM dbo.Employees,
dbo.Incident
ORDER BY NEWID()