我有一组人员,他们最多可以获得三个指标;销售,线索和营业时间。
我在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}}
但它仍未提供所需的输出。有谁知道这可能吗?
答案 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 )