SQL 部门员工两两比较算法

binghuochanmian 2012-07-06 10:46:00
如: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','刘','技术部')
...全文
283 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
狼_Sky 2012-07-11
  • 打赏
  • 举报
回复
同一部门:两两组合 甲乙 甲丙 甲丁 乙丙 乙丁 丙丁 共6
四个人对这两两组合进行评价 4X6=24
两个部门:2X24=48
不对吗、、
求指点、、、、、
楠_ 2012-07-07
  • 打赏
  • 举报
回复
这个才是对的 一共8个人,有 28种组合,记录应该是 224个。
楠_ 2012-07-07
  • 打赏
  • 举报
回复
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','刘','技术部')


GO

Create 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;
End

go
exec P_Proc
GO
Drop Proc P_Proc
Drop Table [User]
Drop Table UserAssess
lycorisraya 2012-07-06
  • 打赏
  • 举报
回复
--存储过程实现
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 评价结果
*/
  • 打赏
  • 举报
回复

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张
*/

AcHerat 2012-07-06
  • 打赏
  • 举报
回复

--我还以为同部门。

;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 行受影响)

binghuochanmian 2012-07-06
  • 打赏
  • 举报
回复
是所有用户两两比较,你这里计算出来的不完整~

[Quote=引用 5 楼 的回复:]
SQL code


CREATE TABLE [dbo].Sys_User( --员工表
[ID] int identity(1,1),
[UserID] [varchar](50) NOT NULL, --员工ID
[UserName] [varchar](50) NULL, --员工姓名
[Use……
[/Quote]
binghuochanmian 2012-07-06
  • 打赏
  • 举报
回复
A和B 相同则不用比较

[Quote=引用 4 楼 的回复:]
SQL code


CREATE TABLE [dbo].[User]( --员工表
[UserID] [varchar](50) NOT NULL, --员工ID
[UserName] [varchar](50) NULL, --员工姓名
[UserOrg] [varchar](50) NULL) ……
[/Quote]
binghuochanmian 2012-07-06
  • 打赏
  • 举报
回复
你这里忽略了一点,即员工 甲乙 和乙甲 是一样的,所以你的数据应该是多算了一倍出来。

[Quote=引用 3 楼 的回复:]
SQL code


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
--……
[/Quote]
AcHerat 2012-07-06
  • 打赏
  • 举报
回复

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) --评价结果
go

set 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.id

drop table Sys_User,[UserAssess]

/***************************

甲:甲 To 丁
甲:甲 To 乙
甲:甲 To 丙
乙:乙 To 丙
乙:乙 To 丁
丙:丙 To 丁
王:王 To 李
王:王 To 张
王:王 To 刘
李:李 To 刘
李:李 To 张
张:张 To 刘

(12 行受影响)
  • 打赏
  • 举报
回复

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刘
*/

筱筱澄 2012-07-06
  • 打赏
  • 举报
回复

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 行受影响)


*/



应该是这样的关系吧


查询写入来了,插入你自己修改一下吧 呵呵
筱筱澄 2012-07-06
  • 打赏
  • 举报
回复
写错了,没看到两两组合 不好意思
筱筱澄 2012-07-06
  • 打赏
  • 举报
回复
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
狼_Sky 2012-07-06
  • 打赏
  • 举报
回复
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 txt

select 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条记录应该对了
狼_Sky 2012-07-06
  • 打赏
  • 举报
回复
抛砖引玉 懒得验证对不对了

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 txt

select 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

haitao 2012-07-06
  • 打赏
  • 举报
回复
n个人,产生n*n*(n-1)条记录。。。。
AcHerat 2012-07-06
  • 打赏
  • 举报
回复

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) --评价结果
go

set 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.id

drop 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 行受影响)
  • 打赏
  • 举报
回复
你把你想要的结果贴出来看看
binghuochanmian 2012-07-06
  • 打赏
  • 举报
回复
是同部门没错,
你看你的甲的投票里面,就没有乙和丙的对比,也没有丁和丙的对比。

[Quote=引用 9 楼 的回复:]
SQL code


--我还以为同部门。

;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
)

……
[/Quote]
【资源介绍】 基于自动生成知识库的智能问答系统python源码+项目说明+数据+超详细注释.tar 说明 首先需保证机器拥有英伟达显卡,供tensorflow平台使用 电脑配置: Acer笔记本 CPU Inter Core i5-6200U GPU NVIDIA GeForce 940M Windows10 所需的环境: Anaconda3(64bit) CUDA-8.0 CuDNN-5.1 Python-3.5 TensorFlow 或者 TensorFlow-gpu Mysql 5.7.22 在本录下运行 pip3 install -r requirements.txt cd data 登录mysql将数据库导入 mysql -u root -p create database test use test source qa.sql exit cd .. cd web python3 web.py 开启服务器 访问localhost:5000/chat 即可访问智能问答页面 知识库 知识库传统的做法是三元组,但这个项目并不需要这样做,仅做笔记 知识字典 D 可用三元组表示如下: D = ( O , T , E ) 把三元组理解为 (实体entity,实体关系relation,实体entity),把实体看作是结点,把实体关系(包括属性,类别等等)看作是一条边,那么包含了大量三元组的知识库就成为了一个庞大的知识图。 知识库涉及到的两大关键技术是 实体链指(Entity linking) ,即将文档中的实体名字链接到知识库中特定的实体上。它主要涉及自然语言处理领域的两个经典问题实体识别 (Entity Recognition) 与实体消歧 (Entity Disambiguation),简单地来说,就是要从文档中识别出人名、地名、机构名、电影等命名实体。并且,在不同环境下同一实体名称可能存在歧义,如苹果,我们需要根据上下文环境进行消歧。 关系抽取 (Relation extraction),即将文档中的实体关系抽取出来,主要涉及到的技术有词性标注 (Part-of-Speech tagging, POS),语法分析,依存关系树 (dependency tree) 以及构建SVM、最大熵模型等分类器进行关系分类等。 理想的联合学习应该如下图:输入一个句子,通过实体识别和关系抽取联合模型,直接得到有关系的实体三元组。这种可以克服上面流水线方法的缺点,但是可能会有更复杂的结构。参考:https://zhuanlan.zhihu.com/p/31672529 实体提取用哈工大的库pyltp(可以用CTB模型重新做分词模型),导入官方模型即可,也可以导入自己的 关系提取转换为分类问题,这个我在推理机里已经做了 文档结构树:做法不同于传统的文档结构树,由于数据集是网页,层次结构分明而答案并不需要经过NLP分析得到,只需要得到某一段落的文字。这样按标签提取即可,如h标签的通常是标题重要信息。原想用h标签做问题,答案用它的兄弟节点,可是网页层次不统一,情况复杂。并不适合用这种算法。所以自行做了创新:得到所有h标签,取两两中间的部分作为答案,准确率高 利用文档结构树从问题映射到答案。 数据库: 标准问题:通过规则组合关键词生成(基于文档结构树技术) 答案:带网页标签的答案 描述词:此数据的描述,由网页中提取出 问题词组:通过分词(全模式分词算法)和去除停用词等步骤得到的词组。用于计算文本相似度。 答案词组:通过分词(全模式分词算法)和去除停用词等步骤得到的词组。用于计算文本相似度。 感觉标准答案只是给评委看,并不是作为问题检索的最重要的方式。暂时先这样做,准确度和效率不行就只用结构。因为问句很难匹配,而结构只需词对上即可 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
第一篇 面试题 ................................................................................ 8 1.1. 简介 ............................................................................................................... 8 1.2. 面试题集合(一) .......................................................................................... 8 1.2.1. 把二元查找树转变成排序的双向链表.................................................... 8 1.2.2. 下排每个数都是先前上排那十个数在下排出现的次数 ..........................11 1.2.3. 设计包含 min 函数的栈 ...................................................................... 14 1.2.4. 求子数组的最大和.............................................................................. 20 1.2.5. 在二元树中找出和为某一值的所有路径 .............................................. 22 1.2.6. Top K 算法详细解析---百度面试 ......................................................... 29 1.2.7. 翻转句子中单词的顺序....................................................................... 31 1.2.8. 判断整数序列是不是二元查找树的后序遍历结果 ................................ 33 1.2.9. 查找最小的 K 个元素-使用最大堆....................................................... 35 1.2.10. 求二叉树中节点的最大距离................................................................ 37 1.3. 面试题集合(二) ........................................................................................ 40 1.3.1. 求 1+2+…+n....................................................................................... 40 1.3.2. 输入一个单向链表,输出该链表中倒数第 k 个结点............................. 44 1.3.3. 输入一个已经按升序排序过的数组和一个数字.................................... 46 1.3.4. 输入一颗二元查找树,将该树转换为它的镜像.................................... 48 1.3.5. 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往 右的顺序打印................................................................................................... 49 1.3.6. 在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b 52 1.3.7. n 个数字(0,1,…,n-1)形成一个圆圈 .................................................. 53 1.3.8. 定义 Fibonacci 数列 ............................................................................ 58 1.3.9. 左移递减数列查找某一个数.........................................

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧