如何将表X的列A中的值插入表Y的列B - 并随机排序

时间:2013-10-25 11:21:45

标签: sql sql-server sql-server-2008

我需要从“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()

谢谢大家的帮助 - 我认为需要花费更长的时间才能找到解决方案;但我终于成功了。谢谢!

2 个答案:

答案 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()