从2个表创建一个视图,不重复

时间:2014-07-16 10:48:58

标签: sql sql-server

太跟我一起了 我想创建一个组合来自2个表的数据的视图:

RETRY:

TaskId  status
   1       13
   2       4

文件

FileId(key) TaskId  Study
  1          1       2.3
  2          1       2.3
  3          2       4.5
  4          2       4.5

我需要一个联合视图:

TaskId   Study
 1         2.3
 2         4.5

我得到的是:

TaskId   Study
 1         2.3
 1         2.3
 2         4.5
 2         4.5

由于任务ID总是属于同一项研究,因此我需要为每项任务ID获得1项研究。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

按任务分组。然后,您可以使用聚合函数(如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 
);

答案 2 :(得分:0)

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

这假定Study对于特定Task_id始终具有相同的值。如果不是这样,并且您实际想要的是Study Task_id的所有值的总和,您可以使用Juergen D的答案。