Oracle :SQL 请求在两个不同的表上使用分组依据和百分比

Oracle : SQL Request with a Group By and a Percentage on two differents tables

我目前因一个复杂的请求而被阻止...(加入):

我有这个 table "DATA":

order | product
----------------
  1   |  A 
  1   |  B  
  2   |  A  
  2   |  D   
  3   |  A  
  3   |  C
  4   |  A  
  4   |  B
  5   |  Y  
  5   |  Z
  6   |  W  
  6   |  A

还有这个table"DICO":

    order | couple | first | second
    -------------------------------
      1   |  A-B   |   A   |   B
      2   |  A-D   |   A   |   D
      3   |  A-C   |   A   |   C
      4   |  A-B   |   A   |   B
      5   |  Y-Z   |   Y   |   Z
      6   |  W-A   |   W   |   A

我想在线获取:

order | count | total1stElem | %1stElem | total2ndElem | %1ndElem
------------------------------------------------------------------
A-B   |  2    |       5      |    40%   |     2        |    100%       
A-D   |  1    |       5      |    20%   |     1        |    100%      
A-C   |  1    |       5      |    20%   |     1        |    100%         
Y-Z   |  1    |       1      |    100%  |     1        |    100%     
W-A   |  1    |       1      |    100%  |     5        |    20%       

我的请求的关节部分完全被阻止了。有人可以帮助我吗?

没有任何连接 - 仅使用 UNPIVOTPIVOT:

Oracle 设置:

CREATE TABLE DICO ( "order", couple, first, second ) AS
SELECT 1, 'A-B', 'A', 'B' FROM DUAL UNION ALL
SELECT 2, 'A-D', 'A', 'D' FROM DUAL UNION ALL
SELECT 3, 'A-C', 'A', 'C' FROM DUAL UNION ALL
SELECT 4, 'A-B', 'A', 'B' FROM DUAL UNION ALL
SELECT 5, 'Y-Z', 'Y', 'Z' FROM DUAL UNION ALL
SELECT 6, 'W-A', 'W', 'A' FROM DUAL;

查询:

SELECT "order",
       "count",
       "1stElem_TOTAL" AS Total1stElem,
       100*"count"/"1stElem_TOTAL" AS "%1stElem",
       "2ndElem_TOTAL" AS Total2ndElem,
       100*"count"/"2ndElem_TOTAL" AS "%2ndElem"
FROM   (
    SELECT couple AS "order",
           key,
           COUNT(*) OVER ( PARTITION BY COUPLE )/2 AS "count",
           COUNT(*) OVER ( PARTITION BY VALUE ) AS num_value
    FROM   DICO
    UNPIVOT ( Value FOR Key IN ( first AS 1, second AS 2 ) )
)
PIVOT ( MAX( NUM_VALUE ) AS Total FOR key IN ( 1 AS "1stElem", 2 AS "2ndElem" ) );

结果:

order count TOTAL1STELEM %1stElem TOTAL2NDELEM %2ndElem
----- ----- ------------ -------- ------------ --------
A-D       1            5       20            1      100
A-B       2            5       40            2      100
A-C       1            5       20            1      100
Y-Z       1            1      100            1      100
W-A       1            1      100            5       20