[英]SQL query with multiple SELECT
我的应用程序中有要显示的表,而我要显示的表是其中一行具有通过以下方式计算的值:
SELECT SUM (val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = ? AND rov.orbiting_group_indice_id = ?
对于第一行,我要显示4个值,每个值都将如下所示:
SELECT SUM (val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = (1,2,3,4) AND rov.orbiting_group_indice_id = 1
其中(1,2,3,4)是4个不同的SELECT语句,分别具有(1,2,3,4)值。 在下一行中,我将更改rov.orbiting_group_indice_id
= 2,并希望使用相同的rov.orbiting_group_type_id
值(1,2,3,4)。
我是SQL的新手,我想问一下,如何用该值表示表?
因此它应该类似于column1-value,column2-value,column3-value,column4-value。
谢谢!
更新:我想要类似以下内容:
SELECT
(SELECT
SUM(val)
FROM
report_orbiting_vals rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 1) as colOne,
(SELECT
SUM(val)
FROM
report_orbiting_vals rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 2) as colTwo,
(SELECT
SUM(val)
FROM
report_orbiting_vals rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 3) as colThree,
(SELECT
SUM(val)
FROM
report_orbiting_vals rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 4) as colFourth
不幸的是,上面的代码无法正常工作,它会产生一个错误,但是我希望您现在了解我想要的。
更新(2):
我尝试了下面提供的2个解决方案,第一个:
SELECT
(SELECT
SUM(val)
FROM
report_orbitings rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 1) as colOne,
(SELECT
SUM(val)
FROM
report_orbitings rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 2) as colTwo,
(SELECT
SUM(val)
FROM
report_orbitings rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 3) as colThree,
(SELECT
SUM(val)
FROM
report_orbitings rov
WHERE
rov.orbiting_group_type_id = 1
AND rov.orbiting_group_indice_id = 4) as colFourth
FROM report_orbitings rv
输出:
而第二:
SELECT SUM(CASE WHEN rov.orbiting_group_type_id = 1 THEN val ELSE 0 END) as type1_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 2 THEN val ELSE 0 END) as type2_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 3 THEN val ELSE 0 END) as type3_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 4 THEN val ELSE 0 END) as type4_sum
FROM report_orbitings rov
WHERE rov.orbiting_group_type_id in (1,2,3,4)
AND rov.orbiting_group_indice_id = 1
输出:
明确地说,我想承认,我的数据库还没有数据,只是结构而已。 我仍然认为第二个代码工作而第一个代码不工作,因为它输出[Null]而不是什么。 为什么这两个示例有区别? 它应该产生相同的输出。
不确定我是否遵循,或者您想要它们的总和,那么您需要使用IN()
:
SELECT SUM (val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id in (1,2,3,4)
AND rov.orbiting_group_indice_id = 1
或者,您希望每个人的总和在不同的列中:
SELECT SUM(CASE WHEN rov.orbiting_group_type_id = 1 THEN val ELSE 0 END) as type1_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 2 THEN val ELSE 0 END) as type2_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 3 THEN val ELSE 0 END) as type3_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 4 THEN val ELSE 0 END) as type4_sum
FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id in (1,2,3,4)
AND rov.orbiting_group_indice_id = 1
也许您需要这样:
SELECT
(SELECT SUM(val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
AND rov.orbiting_group_indice_id = 1) as colOne,
(SELECT SUM(val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
AND rov.orbiting_group_indice_id = 2) as colTwo,
(SELECT SUM(val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
AND rov.orbiting_group_indice_id = 3) as colThree,
(SELECT SUM(val) FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
AND rov.orbiting_group_indice_id = 4) as colFourth,
rv.orbiting_group_type_id
FROM report_orbiting_vals rv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.