繁体   English   中英

具有多个SELECT的SQL查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM