将 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;
我找不到划分我的 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;