我的基础数据:
进程ID | 地点 | 日期 | 时效性 |
---|---|---|---|
2030608 | 纽约 | 5月24日 | 及时 |
2067393 | 俄亥俄州 | 5月24日 | 逾期 |
1329306 | 俄亥俄州 | 5月24日 | 及时 |
1740814 | 俄亥俄州 | 6 月 24 日 | 逾期 |
1924676 | 芝加哥 | 5月24日 | 逾期 |
1985313 | 芝加哥 | 5月24日 | 逾期 |
1715694 | 旧金山 | 6 月 24 日 | 及时 |
1981887 | 旧金山 | 6 月 24 日 | 逾期 |
1752416 | 旧金山 | 7 月 24 日 | 逾期 |
1671006 | 纽约 | 5月24日 | 及时 |
2030607 | 纽约 | 6 月 24 日 | 及时 |
我想聚合它以在可视化工具中使用它。
我的聚合查询的当前输出:
地点 | 日期 | 银泰时代 | 总计 | 百分比 |
---|---|---|---|---|
纽约 | 5月24日 | 3 | 3 | 100 |
俄亥俄州 | 5月24日 | 1 | 2 | 50 |
旧金山 | 6 月 24 日 | 1 | 2 | 50 |
我的问题:某些数据从聚合中删除,因为该位置和月份没有 intime 进程。
我需要的输出:(直接来自上面的基础数据)
地点 | 日期 | 银泰时代 | 总计 | 百分比 |
---|---|---|---|---|
纽约 | 5月24日 | 3 | 3 | 100 |
俄亥俄州 | 5月24日 | 1 | 2 | 50 |
俄亥俄州 | 6 月 24 日 | 0 | 1 | 0 |
旧金山 | 6 月 24 日 | 1 | 2 | 50 |
旧金山 | 7月24日 | 0 | 1 | 0 |
芝加哥 | 5月24日 | 0 | 2 | 0 |
我当前用于聚合的查询是:
SELECT
gesamt2.Location,
gesamt2.date,
intime2.anzahl AS intime,
gesamt2.anzahl AS total,
CAST(intime2.anzahl AS float) / CAST(gesamt2.anzahl AS float) * 100 AS percentage
FROM
(
SELECT
location,
anzahl,
date
FROM
(
SELECT
Location,
Date,
timeliness,
COUNT(1) AS anzahl
FROM
basedata
GROUP BY ROLLUP (Location, Date, Timeliness)
) AS gesamt
WHERE
(timeliness IS NULL)
) AS gesamt2
INNER JOIN
(
SELECT
mapping, anzahl, date
FROM
(
SELECT
Location,
Date,
timeliness,
COUNT(1) AS anzahl
FROM
basedata
WHERE
(BASE_FINAL_APPROVAL > GETDATE() - 366)
GROUP BY ROLLUP (Location, Date, timeliness)
) AS intime
WHERE
(timeliness = 'in time')
) AS intime2 ON
gesamt2.Location = intime2.Location
AND
gesamt2.date = intime2.date
如果使用条件聚合,查询会简单得多。
SELECT *, ROUND(intime/total*100, 0) as percentage
FROM
(SELECT Location,
[Date],
SUM(CASE WHEN Timeliness='in time' THEN 1 ELSE 0 END) as intime,
COUNT(*) as total
FROM YourTable
GROUP BY Location, `Date`) agg
;
以上未在 SQL Server 中测试。