sql - PostgreSQL 将多个查询输出到数组中
问题描述
在 postgreSQL 9.6 中工作:
我有许多选择语句,每个语句都输出一行
例如选择 8 作为“ColA”,选择 20 作为“ColB”,选择 13 作为“ColC”
我需要将它们放入一个数组中,例如:
["ColA",8],["ColB",20],["ColC",13]
我已经尝试了很多种 row_to_json、array_to_json 等,但没有任何乐趣,有人可以帮忙吗?
我尝试过的实际代码比上面描述的要复杂一些,但数据的结构不是......这是我现有的代码(只是为了表明我有
SELECT "JobTitle" "name",
(
select array_to_json(array_agg(row_to_json(d2))) from
(SELECT
(select row_to_json(d2_1) from (select SUM(CASE WHEN "StartDateTime"<(_Date_For + '1 hour'::interval) AND "EndDateTime">(_Date_For) THEN "Effect" ELSE 0 END) "00:00" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_1)
UNION ALL
(select row_to_json(d2_10) from (select SUM(CASE WHEN "StartDateTime"<(_Date_For + '11 hour'::interval) AND "EndDateTime">(_Date_For + '10 hour'::interval) THEN "Effect" ELSE 0 END) "10:00" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_10)
UNION ALL
(select row_to_json(d2_11) from (select SUM(CASE WHEN "StartDateTime"<(_Date_For + '12 hour'::interval) AND "EndDateTime">(_Date_For + '11 hour'::interval) THEN "Effect" ELSE 0 END) "11:00" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_11)
) d2
) as "data"
FROM "tmpDashboardData" x GROUP BY "JobTitle"
解决方案
谢谢 Fdavidov 我最终解决了这个问题......这是我的信息代码:
SELECT "JobTitle" "name",
(
select array_to_json(array_agg(row_to_json(d2))) from
(SELECT
(select row_to_json(d2_1) from (select '00:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '1 hour'::interval) AND "EndDateTime">(_Date_For) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_1) UNION ALL
(select row_to_json(d2_2) from (select '01:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '2 hour'::interval) AND "EndDateTime">(_Date_For + '1 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_2) UNION ALL
(select row_to_json(d2_3) from (select '02:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '3 hour'::interval) AND "EndDateTime">(_Date_For + '2 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_3) UNION ALL
(select row_to_json(d2_4) from (select '03:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '4 hour'::interval) AND "EndDateTime">(_Date_For + '3 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_4) UNION ALL
(select row_to_json(d2_5) from (select '04:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '5 hour'::interval) AND "EndDateTime">(_Date_For + '4 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_5) UNION ALL
(select row_to_json(d2_6) from (select '05:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '6 hour'::interval) AND "EndDateTime">(_Date_For + '5 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_6) UNION ALL
(select row_to_json(d2_7) from (select '06:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '7 hour'::interval) AND "EndDateTime">(_Date_For + '6 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_7) UNION ALL
(select row_to_json(d2_8) from (select '07:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '8 hour'::interval) AND "EndDateTime">(_Date_For + '7 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_8) UNION ALL
(select row_to_json(d2_9) from (select '08:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '9 hour'::interval) AND "EndDateTime">(_Date_For + '8 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_9) UNION ALL
(select row_to_json(d2_10) from (select '09:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '10 hour'::interval) AND "EndDateTime">(_Date_For + '9 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_10) UNION ALL
(select row_to_json(d2_11) from (select '10:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '11 hour'::interval) AND "EndDateTime">(_Date_For + '10 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_11) UNION ALL
(select row_to_json(d2_12) from (select '11:00' "0", SUM(CASE WHEN "StartDateTime"<(_Date_For + '12 hour'::interval) AND "EndDateTime">(_Date_For + '11 hour'::interval) THEN "Effect" ELSE 0 END) "1" from "tmpDashboardData" where "JobTitle"=x."JobTitle") d2_12)
) d2
) as "data"
FROM "tmpDashboardData" x GROUP BY "JobTitle"
推荐阅读
- java - 部署到 Google App Engine 的 Spring Boot (Gradle) 应用返回 404 Not Found
- vb.net - 如何在属性面板中显示用户控件的属性
- c# - 将光标限制在我的播放器周围的半径范围内
- r - 如何根据月份从数据框中提取数据?
- linux - 如何在 Nginx 中使用 https 重定向将 www 重定向到裸域?
- youtrack - 如何通过外部集线器集成从 youtrack 中的模板创建项目?
- arrays - 使用 Jest 匹配从 sequelize 返回的数组
- python - DataFrame 将 json 列表扩展为多行
- c# - 如何检查 RichTextBox 中的文本是否带下划线?
- react-native - 如何在 react-native (expo) 中出现致命错误时运行重置脚本?