我有3张桌子:
tblEmployee
E_ID E_Name E_City
--------------------------------
101 sasa Mumbai
102 sdf California
103 trt Illinois
104 dssd Texas
105 trt Pennsylvania
106 wee Arizona
107 rer Texas
108 wqe California
109 sadd Michigan
tblGen
Tgenerate
是布尔值
Emp_ID Tgenerate
--------------------
105 1
108 1
102 1
102 1
102 0
104 1
107 0
108 1
109 0
tblStat :
Emp_ID Status
------------------
103 Pending
107 Pending
103 Pending
101 Delivered
104 Pending
104 Pending
108 Pending
101 Delivered
105 Delivered
我必须加入这3个表并希望像这样输出
E_Name EmployeeID City TgenerateCount Delivered_Count Ranking
为每位员工计算 TgenerateCount
。它是TgenerateCount
的值为1,因为ex 102有2个TgenerateCount而109有0个TgenerateCount。
Delivered_Count是已经交付的人数的状态计数'状态。对于前者101已交付2。我想在输出表中显示每个用户。
非常感谢任何帮助。
答案 0 :(得分:1)
由于您的两个事实表与维度表有很多:1关系,因此您应该在加入它们之前将它们聚合在一起。
SELECT
e.*,
COALESCE(g.rows, 0) AS TgenerateCount,
COALESCE(s.rows, 0) AS DeliveredCount,
RANK() OVER (ORDER BY COALESCE(g.rows, 0) + COALESCE(s.rows,0) DESC) AS ranking
FROM
tblEmployee e
LEFT JOIN
(
SELECT E_ID, COUNT(*) AS rows FROM tblGen WHERE Tgenerate = 1 GROUP BY E_ID
)
g
ON g.E_ID = e.E_ID
LEFT JOIN
(
SELECT E_ID, COUNT(*) AS rows FROM tblStat WHERE STATUS = 'Delivered' GROUP BY E_ID
)
s
ON s.E_ID = e.E_ID
你一直不清楚应该如何完成排名,所以这只是给出一个例子排名。