将 2 个查询元素的结果除以 wis

Divide result of 2 queries element wis

我找不到划分我的 2 个查询结果的方法。

他们看起来像这样:

SELECT periode, cee_ref_no, SUM(somme) AS total FROM V_STAT_NAMUR 
WHERE code_ref_no IN (1, 2, 3, 4, 5, 6, 193, 215, 237, 259, 281)
AND periode BETWEEN '201401' AND '201412'
AND cee_ref_no = '961'
GROUP BY periode, cee_ref_no
ORDER BY periode;

SELECT periode, cee_ref_no, SUM(somme) AS total FROM V_STAT_NAMUR
WHERE code_ref_no IN (7, 8, 9, 10, 205, 227, 249, 271, 293)
AND periode BETWEEN '201401' AND '201412'
AND cee_ref_no = '961'
GROUP BY periode, cee_ref_no
ORDER BY periode;

它们看起来很相似,而且都 return 是这样的:

 DATE  | CEE_REF_NO | TOTAL
201401 |   961      | 10713
201402 |   961      | 9593
...    |   961      | ...
201412 |   961      | 10426

我怎样才能合并这些以获得这样的东西:

 DATE  | CEE_REF_NO | TOTAL
201401 |   961      | Total Q1/ Total Q2
201402 |   961      | Total Q1/ Total Q2
...    |   961      | ...
201412 |   961      | Total Q1/ Total Q2

我尝试过的所有方法 return 要么只编辑了一行,要么编辑了 12 行结果相同。

非常感谢!

使用条件聚合:

SELECT periode, cee_ref_no,
       SUM(CASE WHEN code_ref_no IN (1, 2, 3, 4, 5, 6, 193, 215, 237, 259, 281) THEN somme ELSE 0 END) AS total_1,
       SUM(CASE WHEN code_ref_no IN (7, 8, 9, 10, 205, 227, 249, 271, 293) THEN somme ELSE 0 END) AS total_2,
       (SUM(CASE WHEN code_ref_no IN (1, 2, 3, 4, 5, 6, 193, 215, 237, 259, 281) THEN somme ELSE 0 END) /
        SUM(CASE WHEN code_ref_no IN (7, 8, 9, 10, 205, 227, 249, 271, 293) THEN sommeEND)
       ) AS ratio
FROM V_STAT_NAMUR 
WHERE  AND
      periode BETWEEN '201401' AND '201412'
GROUP BY periode, cee_ref_no
ORDER BY periode;

你可以试试这个:

select q1.periode, q1.cee_ref_no, q1.total as Total1, q2.total as Total2, q1.total/q2.total as Division
from (
    SELECT periode, cee_ref_no, SUM(somme) AS total FROM V_STAT_NAMUR 
    WHERE code_ref_no IN (1, 2, 3, 4, 5, 6, 193, 215, 237, 259, 281)
    AND periode BETWEEN '201401' AND '201412'
    AND cee_ref_no = '961'
    GROUP BY periode, cee_ref_no
  ) q1
  join (
    SELECT periode, cee_ref_no, SUM(somme) AS total FROM V_STAT_NAMUR
    WHERE code_ref_no IN (7, 8, 9, 10, 205, 227, 249, 271, 293)
    AND periode BETWEEN '201401' AND '201412'
    AND cee_ref_no = '961'
    GROUP BY periode, cee_ref_no
  ) q2
  on q1.Periode=q2.Periode
 and q1.cee_ref_no=q2.cee_ref_no

基本上你只需要用你的查询创建 2 个子选择并按句点和 cee_ref_no 加入它们(如果你要包含超过 1 个 cee_ref_no,在你的例子中只有一)。然后你就可以将总计从 q1 和 q2 中除以。

注意连接,我不知道你的数据是否会有两个查询中所有月份的信息。

PS: 查询未测试,直接写在编辑器上。

试试这个

    Select periode, cee_ref_no, total1/total2 as Total
    From (
    SELECT periode, cee_ref_no, 
    sum(Case when code_ref_no in (1, 2, 3, 4, 5, 6, 193, 215, 237, 259, 281) Then somme else 0 end) as total1,
    sum(Case when code_ref_no in (7, 8, 9, 10, 205, 227, 249, 271, 293) Then somme else 0 end) as total2
    From my_table
WHERE code_ref_no IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 193, 205, 215, 227, 237, 249, 259, 271, 281, 293)
    AND periode BETWEEN '201401' AND '201412'
    AND cee_ref_no = '961'
    GROUP BY periode, cee_ref_no
    )
    ORDER BY periode;