Sql 从两个表中创建视图,不重复

Sql 从两个表中创建视图,不重复,sql,sql-server,Sql,Sql Server,所以请容忍我 我想创建一个视图,该视图组合了来自2个表的数据: 重试: TaskId status 1 13 2 4 档案 我需要一个联合视图: TaskId Study 1 2.3 2 4.5 我得到的是: TaskId Study 1 2.3 1 2.3 2 4.5 2 4.5 因为任务id总是属于同一个研究,所以我只需要为每个任务i

所以请容忍我 我想创建一个视图,该视图组合了来自2个表的数据:

重试:

TaskId  status
   1       13
   2       4
档案

我需要一个联合视图:

TaskId   Study
 1         2.3
 2         4.5
我得到的是:

TaskId   Study
 1         2.3
 1         2.3
 2         4.5
 2         4.5
因为任务id总是属于同一个研究,所以我只需要为每个任务id获取一个研究

CREATE VIEW [dbo].[TASK_TO_STUDY] As (
SELECT dbo.RETRY.task_id 
FROM    dbo.RETRY_TASKS dbo.FILES.Study
LEFT JOIN   dbo.FILES ON dbo.FILES.task_id = dbo.RETRY.task_id  
);

按任务分组。然后,您可以使用聚合函数(如
min
)进行特定的研究

CREATE VIEW [dbo].[TASK_TO_STUDY] As 
(
  SELECT dbo.RETRY.task_id, MIN(dbo.FILES.Study) as Study
  FROM    dbo.RETRY_TASKS 
  LEFT JOIN   dbo.FILES ON dbo.FILES.task_id = dbo.RETRY.task_id
  GROUP BY dbo.RETRY.task_id 
);

使用
DISTINCT
关键字仅检索所选列的独特组合:

CREATE VIEW [dbo].[TASK_TO_STUDY] As 
(
 SELECT DISTINCT dbo.RETRY.task_id, dbo.FILES.Study 
 FROM    dbo.RETRY_TASKS dbo.FILES.Study
 LEFT JOIN   dbo.FILES ON dbo.FILES.task_id = dbo.RETRY.task_id  
);

这假设
研究
对于特定的
任务id
始终具有相同的值。如果不是这样,并且您实际想要的是
任务id
研究的所有值之和,您可以使用Juergen D的答案。

根据您的解释,这可能基于输入数据和预期数据

CREATE VIEW [dbo].[TASK_TO_STUDY] As (
SELECT DISTINCT r.task_id,f.Study 
FROM    dbo.RETRY_TASKS r 
JOIN dbo.FILES f ON f.task_id = r.task_id  
);

研究
代表什么?对于给定的
任务ID
,它是否总是相同的值?
CREATE VIEW [dbo].[TASK_TO_STUDY] As (
SELECT DISTINCT r.task_id,f.Study 
FROM    dbo.RETRY_TASKS r 
JOIN dbo.FILES f ON f.task_id = r.task_id  
);