首页新闻找找看学习计划

求一条sql语句

0
悬赏园豆:50 [待解决问题]

任务表

用户操作表

 

需求:

用户操作表:某一个用户(UserID)可以操作某一种型号的机器(机器重量是多少,机器型号多少)。一个用户可能会操作多种型号的机器。

任务表:某一个需求(编号),需要某一种型号的机器(机器重量是多少,机器型号多少),一个需求可能需要多种型号的机器。

现在要求某个用户可以操作任务表里面,某一个编号需要的所有型号的机器,譬如:

UserID=1的用户,会3种型号的机器,编号1001的任务需要这其中的2种型号的机器,UserID=1的用户就可以搞定编号1001的所有任务。

UserID=2的用户,只会1种型号的机器,编号1001的任务却需要2种型号的机器,UserID=2的用户就可以搞不定编号1001的所有任务。

UserID=3的用户,只会1种型号的机器,编号1003的任务需要这其中的1种型号的机器,UserID=3的用户就可以搞定编号1003的任务。

 

 

以上表希望得到的结果:

 

ruanmou的主页 ruanmou | 初学一级 | 园豆:32
提问于:2016-02-24 17:08
< >
分享
所有回答(7)
0

我分析了一下,你这个需求用sql实现起来有点困难,还是通过程序来实现吧

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-24 20:43
0

两个表根据重量和型号做inner join不行么?

Daniel Cai | 园豆:10374 (专家六级) | 2016-02-25 09:58

不行,请仔细看看需求。 

支持(0) 反对(0) ruanmou | 园豆:32 (初学一级) | 2016-02-25 10:13
0

你应该定义一个机器表,标明:机器ID、重量、型号。然后,用户的能力与任务的需求是与机器ID相关,这样查起来会更好。

519740105 | 园豆:5810 (大侠五级) | 2016-02-25 14:28
0

任务表:Task,各字段为:

SerialNo、weight、type

 

用户操作表:User_operation,各字段为:

UserID、weight、type

 

楼主想要的sql语句如下:

select
a.SerialNo as [订单编号],
a.UserID as [用户ID]
from
(
    select SerialNo, UserID, count(*) counter from
    (
        select a.SerialNo, b.UserID from
        Task a inner join User_operation b on a.type = b.type and a.weight = b.weight
    )t
    group by  SerialNo, UserID
)a
inner join
(
    select SerialNo, count(*) counter from Task group by SerialNo
)b
on a.SerialNo = b.SerialNo and a.counter = b.counter

脚本王子 | 园豆:779 (小虾三级) | 2016-02-27 01:19
0

 借用下楼上的表

1 :select count(SerialNo) as countser,SerialNo from task  
group by SerialNo 先求出每个任务都有几个几个要求

2:select count(SerialNo) as countser,SerialNo,userid from
  (
select t.*,u.UserID from task t left join User_operation u
on t.type=u.type and t.weight=u.weight
where u.UserID is not null) t2
group by SerialNo,userid  再求出每个人都能做每个任务中几个要求

3上面两个关联下

select * from (
select count(SerialNo) as countser,SerialNo from task  
group by SerialNo) a
,(
select count(SerialNo) as countser,SerialNo,userid from
  (
select t.*,u.UserID from task t left join User_operation u
on t.type=u.type and t.weight=u.weight
where u.UserID is not null) t2
group by SerialNo,userid ) b
where a.countser=b.countser and a.SerialNo=b.SerialNo

死白的man | 园豆:2135 (老鸟四级) | 2016-03-27 17:14
0

创建任务表Temp1

CREATE TABLE [dbo].[Temp1](
[id] [nchar](10) NULL,
[weights] [int] NULL,
[typeid] [nchar](10) NULL
) ON [PRIMARY]

GO

创建用户操作表Temp2

CREATE TABLE [dbo].[Temp2](
[userId] [nchar](10) NULL,
[weights] [int] NULL,
[typeId] [nchar](10) NULL
) ON [PRIMARY]

GO

 

select distinct a.id as 订单编号,a.userId as 用户ID
from
(select Temp1.id,Temp2.userId ,
(select count(1) from Temp1 where Temp1.typeid =Temp2.typeId and Temp1.weights=Temp2.weights ) as T1

from Temp1 inner join Temp2 on Temp2.typeId=Temp1.typeid and Temp2.weights=Temp1.weights) a,

(select Temp1.id,Temp2.userId ,

(select count(1) from Temp2 where Temp2.typeId=Temp1.typeid and Temp2.weights=Temp1.weights ) as T2

from Temp1 inner join Temp2 on Temp2.typeId=Temp1.typeid and Temp2.weights=Temp1.weights) b

where a.id=b.id and a.userId=b.userId and a.T1=b.T2

 

chenaran | 园豆:283 (菜鸟二级) | 2016-05-11 17:59
0

select count(SerialNo) as countser,SerialNo from task  
group by SerialNo 

起个什么名字呢 | 园豆:416 (菜鸟二级) | 2016-12-09 10:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册