如:A部门内有甲乙丙丁四位员工,
则 甲 需要对 甲乙,甲丙,甲丁,乙丙,乙丁,丙丁进行两两评价投票。
乙 则需要对 甲乙,甲丙,甲丁,乙丙,乙丁,丙丁……无需跨部门比较,自己不用跟自己对比。每次投票时,想通过一个储存过程,插入数据到评价表,然后投票人根据WorkID只投自己的选票。表达不清,见谅~表结构如下:
CREATE TABLE [dbo].[User](            --员工表
[UserID] [varchar](50) NOT NULL,       --员工ID
[UserName] [varchar](50) NULL,         --员工姓名
[UserOrg] [varchar](50) NULL)          --部门


CREATE TABLE [dbo].[UserAssess](       --评价表
         [AutoID] [varchar](50) NOT NULL,       --自增长ID
[UserID_A] [varchar](50) NOT NULL,     --评价对象A
[UserID_B] [varchar](50) NOT NULL,     --评价对象B (A,B不能相同)
[WorkID] [varchar](50) NOT NULL,       --投票人
[Result] [varchar](50) NULL)           --评价结果测试数据:
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('AA','甲','工程部')   
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('DD','丁','工程部')INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('EE','王','技术部')
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('FF','李','技术部')
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('HH','张','技术部')
INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('II','刘','技术部')

解决方案 »

  1.   

    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('AA','甲','工程部')       
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('DD','丁','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('EE','王','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('FF','李','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('HH','张','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('II','刘','技术部')SELECT a.UserName+b.UserName FROM [User] a,[User] b 
    WHERE a.UserOrg=b.UserOrg AND a.UserName<>b.UserName
    ORDER BY a.UserName
      

  2.   


    SELECT c.UserName+'→'+a.UserName+b.UserName AS x FROM [User] a,[User] b,[User] c 
    WHERE a.UserOrg=b.UserOrg 
    AND a.UserOrg=c.UserOrg 
    AND a.UserName<>b.UserName
    ORDER BY x
    /*
    x
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    丙→丙丁
    丙→丙甲
    丙→丙乙
    丙→丁丙
    丙→丁甲
    丙→丁乙
    丙→甲丙
    丙→甲丁
    丙→甲乙
    丙→乙丙
    丙→乙丁
    丙→乙甲
    丁→丙丁
    丁→丙甲
    丁→丙乙
    丁→丁丙
    丁→丁甲
    丁→丁乙
    丁→甲丙
    丁→甲丁
    丁→甲乙
    丁→乙丙
    丁→乙丁
    丁→乙甲
    甲→丙丁
    甲→丙甲
    甲→丙乙
    甲→丁丙
    甲→丁甲
    甲→丁乙
    甲→甲丙
    甲→甲丁
    甲→甲乙
    甲→乙丙
    甲→乙丁
    甲→乙甲
    李→李刘
    李→李王
    李→李张
    李→刘李
    李→刘王
    李→刘张
    李→王李
    李→王刘
    李→王张
    李→张李
    李→张刘
    李→张王
    刘→李刘
    刘→李王
    刘→李张
    刘→刘李
    刘→刘王
    刘→刘张
    刘→王李
    刘→王刘
    刘→王张
    刘→张李
    刘→张刘
    刘→张王
    王→李刘
    王→李王
    王→李张
    王→刘李
    王→刘王
    王→刘张
    王→王李
    王→王刘
    王→王张
    王→张李
    王→张刘
    王→张王
    乙→丙丁
    乙→丙甲
    乙→丙乙
    乙→丁丙
    乙→丁甲
    乙→丁乙
    乙→甲丙
    乙→甲丁
    乙→甲乙
    乙→乙丙
    乙→乙丁
    乙→乙甲
    张→李刘
    张→李王
    张→李张
    张→刘李
    张→刘王
    张→刘张
    张→王李
    张→王刘
    张→王张
    张→张李
    张→张刘
    张→张王(96 行受影响)
    */
    应该是这样的关系吧
    查询写入来了,插入你自己修改一下吧 呵呵
      

  3.   


    CREATE TABLE [dbo].[User](            --员工表
        [UserID] [varchar](50) NOT NULL,       --员工ID
        [UserName] [varchar](50) NULL,         --员工姓名
        [UserOrg] [varchar](50) NULL)          --部门
        
        
    CREATE TABLE [dbo].[UserAssess](       --评价表
             [AutoID] [varchar](50) NOT NULL,       --自增长ID
        [UserID_A] [varchar](50) NOT NULL,     --评价对象A
        [UserID_B] [varchar](50) NOT NULL,     --评价对象B (A,B不能相同)
        [WorkID] [varchar](50) NOT NULL,       --投票人
        [Result] [varchar](50) NULL)           --评价结果
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('AA','甲','工程部')       
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('DD','丁','工程部')INSERT INTO [User](UserID,UserName,UserOrg) VALUES('EE','王','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('FF','李','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('HH','张','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('II','刘','技术部')select 
    a.UserName+'->'+b.UserName+'and'+c.UserName as 比较结果
    from 
    [User] a
    inner join 
    [User] b
    on 
    a.UserID<>b.UserID 
    and a.UserOrg=b.UserOrg
    inner join 
    [User] c
    on 
    a.UserID<>c.UserID 
    and a.UserOrg=c.UserOrg
    where 
    a.UserID<>b.UserID 
    and a.UserID<c.UserID
    /*
    比较结果
    甲->乙and乙
    甲->丙and乙
    甲->丁and乙
    甲->乙and丙
    甲->丙and丙
    甲->丁and丙
    甲->乙and丁
    甲->丙and丁
    甲->丁and丁
    乙->甲and丙
    乙->丙and丙
    乙->丁and丙
    乙->甲and丁
    乙->丙and丁
    乙->丁and丁
    丙->甲and丁
    丙->乙and丁
    丙->丁and丁
    王->李and李
    王->张and李
    王->刘and李
    王->李and张
    王->张and张
    王->刘and张
    王->李and刘
    王->张and刘
    王->刘and刘
    李->王and张
    李->张and张
    李->刘and张
    李->王and刘
    李->张and刘
    李->刘and刘
    张->王and刘
    张->李and刘
    张->刘and刘
    */
      

  4.   


    CREATE TABLE [dbo].Sys_User(            --员工表
    [ID] int identity(1,1),
        [UserID] [varchar](50) NOT NULL,       --员工ID
        [UserName] [varchar](50) NULL,         --员工姓名
        [UserOrg] [varchar](50) NULL)          --部门
        
        
    CREATE TABLE [dbo].[UserAssess](       --评价表
        [AutoID] [varchar](50) NOT NULL,       --自增长ID
        [UserID_A] [varchar](50) NOT NULL,     --评价对象A
        [UserID_B] [varchar](50) NOT NULL,     --评价对象B (A,B不能相同)
        [WorkID] [varchar](50) NOT NULL,       --投票人
        [Result] [varchar](50) NULL)           --评价结果
    goset nocount on
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('AA','甲','工程部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('DD','丁','工程部')INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('EE','王','技术部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('FF','李','技术部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('HH','张','技术部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('II','刘','技术部')
    set nocount off
    go;with cte as
    (
    select a.id,a.username Am,b.username Bm,rid = row_number() over (order by getdate())
    from sys_user a join sys_user b on a.userorg = b.userorg and a.userid <> b.userid
    )select e.username + ':' + t.am + ' To ' + t.bm
    from cte t join Sys_User e on t.id = e.id
    where not exists (select 1 from cte where am = t.bm and bm = t.am and rid > t.rid)
    order by e.iddrop table Sys_User,[UserAssess]/***************************甲:甲 To 丁
    甲:甲 To 乙
    甲:甲 To 丙
    乙:乙 To 丙
    乙:乙 To 丁
    丙:丙 To 丁
    王:王 To 李
    王:王 To 张
    王:王 To 刘
    李:李 To 刘
    李:李 To 张
    张:张 To 刘(12 行受影响)
      

  5.   


    --我还以为同部门。;with cte as
    (
    select a.id,a.username Am,b.username Bm,rid = row_number() over (order by getdate())
    from sys_user a join sys_user b on a.userid <> b.userid
    )select e.username + ':' + t.am + ' To ' + t.bm
    from cte t join Sys_User e on t.id = e.id
    where not exists (select 1 from cte where am = t.bm and bm = t.am and rid > t.rid)
    order by e.id/**************************甲:甲 To 丙
    甲:甲 To 丁
    甲:甲 To 李
    甲:甲 To 刘
    甲:甲 To 王
    甲:甲 To 乙
    甲:甲 To 张
    乙:乙 To 丙
    乙:乙 To 丁
    乙:乙 To 李
    乙:乙 To 刘
    乙:乙 To 王
    乙:乙 To 张
    丙:丙 To 丁
    丙:丙 To 李
    丙:丙 To 刘
    丙:丙 To 王
    丙:丙 To 张
    丁:丁 To 李
    丁:丁 To 刘
    丁:丁 To 王
    丁:丁 To 张
    王:王 To 李
    王:王 To 刘
    王:王 To 张
    李:李 To 刘
    李:李 To 张
    张:张 To 刘(28 行受影响)
      

  6.   


    CREATE TABLE [dbo].[User](            --员工表
        [UserID] [varchar](50) NOT NULL,       --员工ID
        [UserName] [varchar](50) NULL,         --员工姓名
        [UserOrg] [varchar](50) NULL)          --部门
        
        
    CREATE TABLE [dbo].[UserAssess](       --评价表
             [AutoID] [varchar](50) NOT NULL,       --自增长ID
        [UserID_A] [varchar](50) NOT NULL,     --评价对象A
        [UserID_B] [varchar](50) NOT NULL,     --评价对象B (A,B不能相同)
        [WorkID] [varchar](50) NOT NULL,       --投票人
        [Result] [varchar](50) NULL)           --评价结果
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('AA','甲','工程部')       
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('DD','丁','工程部')INSERT INTO [User](UserID,UserName,UserOrg) VALUES('EE','王','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('FF','李','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('HH','张','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('II','刘','技术部')select 
        a.UserName+'->'TT,
        b.UserName+'and'+c.UserName as 比较结果
    from 
        [User] a
    inner join 
        [User] b
    on 
        a.UserID<>b.UserID 
        and a.UserOrg=b.UserOrg
    inner join 
        [User] c
    on 
        a.UserID<>c.UserID 
        and a.UserOrg=c.UserOrg
    where 
        a.UserID<>b.UserID 
        and a.UserID<>c.UserID
        and b.UserID<>c.UserID
    /*
    比较结果
    甲->丙and乙
    甲->丁and乙
    甲->乙and丙
    甲->丁and丙
    甲->乙and丁
    甲->丙and丁
    乙->丙and甲
    乙->丁and甲
    乙->甲and丙
    乙->丁and丙
    乙->甲and丁
    乙->丙and丁
    丙->乙and甲
    丙->丁and甲
    丙->甲and乙
    丙->丁and乙
    丙->甲and丁
    丙->乙and丁
    丁->乙and甲
    丁->丙and甲
    丁->甲and乙
    丁->丙and乙
    丁->甲and丙
    丁->乙and丙
    王->张and李
    王->刘and李
    王->李and张
    王->刘and张
    王->李and刘
    王->张and刘
    李->张and王
    李->刘and王
    李->王and张
    李->刘and张
    李->王and刘
    李->张and刘
    张->李and王
    张->刘and王
    张->王and李
    张->刘and李
    张->王and刘
    张->李and刘
    刘->李and王
    刘->张and王
    刘->王and李
    刘->张and李
    刘->王and张
    刘->李and张
    */
      

  7.   

    --存储过程实现
    if OBJECT_ID('proc_tp') is not null drop proc proc_tp
    go
    create proc proc_tp
    @UserID varchar(50),
    @UserOrg varchar(50)
    as
    begin
    insert into [UserAssess]([UserID_A],[UserID_B],[WorkID],[Result]) 
    select a.UserID UserID_A,b.UserID UserID_B,WorkID=@UserID,Result='评价结果' from [User] a 
    left join [User] b on a.UserID<b.UserID 
    where a.UserOrg=@UserOrg and b.UserOrg=@UserOrg
    end
    go
    --调用存储过程,调用之前先设置[AutoID]字段为自增、整型,你给的有问题
    exec proc_tp 'AA','工程部'
    --查询结果
    /*
    AutoID UserID_A UserID_B WorkID Result
    1 AA BB AA 评价结果
    2 AA CC AA 评价结果
    3 BB CC AA 评价结果
    4 AA DD AA 评价结果
    5 BB DD AA 评价结果
    6 CC DD AA 评价结果
    */
      

  8.   


    CREATE TABLE [dbo].Sys_User(            --员工表
    [ID] int identity(1,1),
        [UserID] [varchar](50) NOT NULL,       --员工ID
        [UserName] [varchar](50) NULL,         --员工姓名
        [UserOrg] [varchar](50) NULL)          --部门
        
        
    CREATE TABLE [dbo].[UserAssess](       --评价表
        [AutoID] [varchar](50) NOT NULL,       --自增长ID
        [UserID_A] [varchar](50) NOT NULL,     --评价对象A
        [UserID_B] [varchar](50) NOT NULL,     --评价对象B (A,B不能相同)
        [WorkID] [varchar](50) NOT NULL,       --投票人
        [Result] [varchar](50) NULL)           --评价结果
    goset nocount on
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('AA','甲','工程部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('DD','丁','工程部')INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('EE','王','技术部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('FF','李','技术部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('HH','张','技术部')
    INSERT INTO Sys_User(UserID,UserName,UserOrg) VALUES('II','刘','技术部')
    set nocount off
    go;with cte as
    (
    select a.id,a.UserOrg,a.username Am,b.username Bm,rid = row_number() over (order by getdate())
    from sys_user a join sys_user b on a.userorg = b.userorg and a.userid <> b.userid
    )select e.username + ':' + t.am + ' To ' + t.bm
    from Sys_User e
    join (select * from cte t
    where not exists (select 1 from cte where am = t.bm and bm = t.am and rid > t.rid)
    ) t on t.UserOrg = e.UserOrg
    order by e.iddrop table Sys_User,[UserAssess]
    /***************************甲:甲 To 乙
    甲:甲 To 丙
    甲:乙 To 丙
    甲:甲 To 丁
    甲:丙 To 丁
    甲:乙 To 丁
    乙:乙 To 丁
    乙:丙 To 丁
    乙:甲 To 丁
    乙:乙 To 丙
    乙:甲 To 丙
    乙:甲 To 乙
    丙:甲 To 乙
    丙:甲 To 丙
    丙:乙 To 丙
    丙:甲 To 丁
    丙:丙 To 丁
    丙:乙 To 丁
    丁:乙 To 丁
    丁:丙 To 丁
    丁:甲 To 丁
    丁:乙 To 丙
    丁:甲 To 丙
    丁:甲 To 乙
    王:王 To 李
    王:王 To 张
    王:李 To 张
    王:王 To 刘
    王:李 To 刘
    王:张 To 刘
    李:张 To 刘
    李:李 To 刘
    李:王 To 刘
    李:李 To 张
    李:王 To 张
    李:王 To 李
    张:王 To 李
    张:王 To 张
    张:李 To 张
    张:王 To 刘
    张:李 To 刘
    张:张 To 刘
    刘:张 To 刘
    刘:李 To 刘
    刘:王 To 刘
    刘:李 To 张
    刘:王 To 张
    刘:王 To 李(48 行受影响)
      

  9.   

    抛砖引玉  懒得验证对不对了create table txt(
    userid varchar(20) not null,
    username varchar(20) ,
    userorg varchar(20),
    )
    insert into txt values('AA','甲','11')
    insert into txt values('BB','乙','11')
    insert into txt values('CC','丙','11')
    insert into txt values('DD','丁','11')
    insert into txt values('EE','赵','22')
    insert into txt values('FF','钱','22')
    insert into txt values('GG','孙','22')
    insert into txt values('HH','李','22')select * from txtselect a.username,b.username from  txt a  join txt b 
    on a.userorg=b.userorg and a.username<>b.username  and a.userid>b.userid
    select x.username,'->',a.username,b.username from  txt x join txt a on x.userorg=a.userorg  join txt b 
    on a.userorg=b.userorg and a.username<>b.username  and a.userid>b.userid and x.userid>=b.userid
      

  10.   

    create table txt(
    userid varchar(20) not null,
    username varchar(20) ,
    userorg varchar(20),
    )
    insert into txt values('AA','甲','11')
    insert into txt values('BB','乙','11')
    insert into txt values('CC','丙','11')
    insert into txt values('DD','丁','11')
    insert into txt values('EE','赵','22')
    insert into txt values('FF','钱','22')
    insert into txt values('GG','孙','22')
    insert into txt values('HH','李','22')select * from txtselect a.username,b.username from  txt a  join txt b 
    on a.userorg=b.userorg and a.username<>b.username  and a.userid>b.userid
    select x.username,'->',a.username,b.username from  txt x join txt a on x.userorg=a.userorg  join txt b 
    on a.userorg=b.userorg and a.username<>b.username上面的是错的,48条记录应该对了
      

  11.   

    CREATE TABLE [dbo].[User](            --员工表
        [UserID] [varchar](50) NOT NULL,       --员工ID
        [UserName] [varchar](50) NULL,         --员工姓名
        [UserOrg] [varchar](50) NULL)          --部门
        
        
    CREATE TABLE [dbo].[UserAssess](       --评价表
             [AutoID] [varchar](50)  NOT NULL,       --自增长ID
        [UserID_A] [varchar](50) NOT NULL,     --评价对象A
        [UserID_B] [varchar](50) NOT NULL,     --评价对象B (A,B不能相同)
        [WorkID] [varchar](50) NOT NULL,       --投票人
        [Result] [varchar](50) NULL)           --评价结果
        
        
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('AA','甲','工程部')       
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('BB','乙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('CC','丙','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('DD','丁','工程部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('EE','王','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('FF','李','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('HH','张','技术部')
    INSERT INTO [User](UserID,UserName,UserOrg) VALUES('II','刘','技术部')
    GOCreate Proc P_Proc
    AS
    Begin
    SET NOCOUNT ON; Create Table #Demo(P1 Varchar(50),P2 Varchar(50) )
    DECLARE @USERID VARCHAR(50)
    Declare CUS CURSOR FOR SELECT UserID FROM [User] ORDER BY UserID
    OPEN CUS 
    FETCH NEXT FROM CUS INTO @USERID
    WHILE @@FETCH_STATUS = 0
    BEGIN
    INSERT INTO #Demo
    SELECT @USERID,UserID
    FROM [User]  T1
    WHERE UserID <> @USERID AND 
    NOT EXISTS(SELECT TOP 1 1 FROM #Demo WHERE (P1=T1.UserID And P2=@USERID) OR (P2=T1.UserID And P1=@USERID) )
    ORDER BY T1.UserID
    FETCH NEXT FROM CUS INTO @USERID
    END

    CLOSE CUS
    DEALLOCATE CUS

    Insert Into UserAssess

    SELECT '自增长ID', T2.P1,T2.P2,T1.UserID,'结果' FROM [User] T1 
    Inner Join #Demo T2 On 1=1
    Order by T1.UserID,T2.P1

    Select * From UserAssess

    DROP TABLE #DEMO

    SET NOCOUNT OFF;
    Endgo
    exec P_Proc
    GO
    Drop Proc P_Proc
    Drop Table [User]
    Drop Table UserAssess