Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何合并和计算oracle中的两列?_Sql_Oracle - Fatal编程技术网

Sql 如何合并和计算oracle中的两列?

Sql 如何合并和计算oracle中的两列?,sql,oracle,Sql,Oracle,我的桌子看起来像这样 A B 1 100 1 102 1 105 2 100 2 105 3 100 3 102 我想要这样的输出: A Count(B) 1 3 1,2 2 1,2,3 3 2 2 3 2 2,3 2 我

我的桌子看起来像这样

A          B
1          100
1          102
1          105
2          100
2          105
3          100
3          102 
我想要这样的输出:

A          Count(B)
1           3 
1,2         2
1,2,3       3
2           2
3           2
2,3         2  
我该怎么做


我尝试使用Listag,但没有成功

我怀疑您想要计算数据中的A集合的数量,并且您的示例结果被弄乱了

如果是:

select grp, count(*)
from (select listagg(a, ',') within group (order by a) as grp
      from t
      group by b
     ) b;
这将为您提供数据中存在的完整组合的计数。结果将是:

1,2,3    1
1,3      1
1,2      1
您可以通过执行以下操作获得原始行数:

select grp, sum(cnt)
from (select listagg(a, ',') within group (order by a) as grp, count(*) as cnt
      from t
      group by b
     ) b;

Oracle安装程序

CREATE TABLE table_name ( A, B ) AS
SELECT 1, 100 FROM DUAL UNION ALL
SELECT 1, 102 FROM DUAL UNION ALL
SELECT 1, 105 FROM DUAL UNION ALL
SELECT 2, 100 FROM DUAL UNION ALL
SELECT 2, 105 FROM DUAL UNION ALL
SELECT 3, 100 FROM DUAL UNION ALL
SELECT 3, 102 FROM DUAL;
SELECT A,
       COUNT(B)
FROM   (
  SELECT SUBSTR( SYS_CONNECT_BY_PATH( A, ',' ), 2 ) AS A,
         B
  FROM   table_name
  CONNECT BY PRIOR B = B
  AND    PRIOR A + 1 = A
)
GROUP BY A
ORDER BY A;
A       COUNT(B)
----- ----------
1              3 
1,2            2 
1,2,3          1 
2              2 
2,3            1 
3              2 
查询

CREATE TABLE table_name ( A, B ) AS
SELECT 1, 100 FROM DUAL UNION ALL
SELECT 1, 102 FROM DUAL UNION ALL
SELECT 1, 105 FROM DUAL UNION ALL
SELECT 2, 100 FROM DUAL UNION ALL
SELECT 2, 105 FROM DUAL UNION ALL
SELECT 3, 100 FROM DUAL UNION ALL
SELECT 3, 102 FROM DUAL;
SELECT A,
       COUNT(B)
FROM   (
  SELECT SUBSTR( SYS_CONNECT_BY_PATH( A, ',' ), 2 ) AS A,
         B
  FROM   table_name
  CONNECT BY PRIOR B = B
  AND    PRIOR A + 1 = A
)
GROUP BY A
ORDER BY A;
A       COUNT(B)
----- ----------
1              3 
1,2            2 
1,2,3          1 
2              2 
2,3            1 
3              2 
输出

CREATE TABLE table_name ( A, B ) AS
SELECT 1, 100 FROM DUAL UNION ALL
SELECT 1, 102 FROM DUAL UNION ALL
SELECT 1, 105 FROM DUAL UNION ALL
SELECT 2, 100 FROM DUAL UNION ALL
SELECT 2, 105 FROM DUAL UNION ALL
SELECT 3, 100 FROM DUAL UNION ALL
SELECT 3, 102 FROM DUAL;
SELECT A,
       COUNT(B)
FROM   (
  SELECT SUBSTR( SYS_CONNECT_BY_PATH( A, ',' ), 2 ) AS A,
         B
  FROM   table_name
  CONNECT BY PRIOR B = B
  AND    PRIOR A + 1 = A
)
GROUP BY A
ORDER BY A;
A       COUNT(B)
----- ----------
1              3 
1,2            2 
1,2,3          1 
2              2 
2,3            1 
3              2 

我不完全理解结果。你能解释一下它们是如何计算的吗?为什么不也有
“2,3………..2”
?很不清楚你在问什么。对不起我的英语,我忘了,输出中还有2,3…….2