对于其他表中的每个唯一ID,重复左表中的所有行

时间:2017-03-22 14:38:23

标签: sql ms-access

我有一组人员,他们最多可以获得三个指标;销售,线索和营业时间。

我在MS Access中有一个表(tblScores),它包含这些分数但仅在有任何分数时才有。 (例如,如果某人没有销售,则他们没有进入销售的入场券)

| USERID  |    Metric   |  Score  | 
----------------------------------
| 20511   |     Sales   |  12     | 
| 20511   |     Leads   |  9      | 
| 20511   |     Hours   |  8      | 
| 20694   |     Sales   |  10     | 
| 20694   |     Leads   |  Null   |
| 20694   |     Hours   |  7.5    |

我正在尝试创建一个SQL查询,该查询将为上表中的每个用户输出三个记录(每个可能的度量标准),包括空值,他们没有该指标的条目。 e.g

|    Metric   |
---------------
|     Sales   | 
|     Leads   |  
|     Hours   |  

我已经设置了另一个表(tblMetrics),仅包含这3个指标

SELECT tblMetrics.*, TblScores.UserID, TblScores.Score
FROM tblMetrics LEFT JOIN TblScores ON tblMetrics.Metric = TblScores.Metric;

并尝试针对分数表在指标表上进行左连接

{{1}}

但它仍未提供所需的输出。有谁知道这可能吗?

1 个答案:

答案 0 :(得分:2)

您需要先CROSS JOIN生成所有组合,然后执行LEFT JOIN查找哪个组合并分配NULL

我检查访问语法,CROSS JOIN应该像这样写

SELECT DISTINCT M.Metric, S.USERID  
FROM tblMetric M, tblScore S

Left Join应为

SELECT userMetrc.*, S.Score  
FROM ( SELECT DISTINCT M.Metric, S.USERID  
       FROM tblMetric M, tblScore S
     ) userMetric
LEFT JOIN  tblScore S
  ON (     userMetric.USERID = S.USERID  
       AND userMetric.Metric = S.Metric )