在Oracle中对每一列进行计数的正确方法是什么

kwvwclae  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(97)

我有一个有几列的表。除了客户一栏,我想自己都数一数。我需要查看段“1”中的“customer:100”在“value 1”上完成了多少交易。在这个场景的底部,答案是2。
| 价值1|价值2|价值3|价值4|价值观5|价值观6|价值观7|价值8| value8 |
| --|--|--|--|--|--|--|--| ------------ |
| 一个|二个|五个|三个|二个|一个|二个|一个| 1 |
| 一个|三个|四个|三个|二个|五个|二个|一个| 1 |
| 三个|二个|二个|二个|二个|一个|二个|一个| 1 |
| 三个|二个|一个|二个|一个|三个|五个|二个| 2 |
| 二个|二个|五个|四个|二个|三个|四个|三个| 3 |
我需要这样的东西:
| 立柱|一个|二个|三个|四个|五个| 5 |
| --|--|--|--|--|--| ------------ |
| 价值1|二个|0个|0个|0个|0个| 0 |
| 价值2| 0个|一个|一个|0个|0个| 0 |
| 价值3| 0个|0个|0个|一个|一个| 1 |
| 价值4| 0个|0个|二个|0个|0个| 0 |
| 价值观5| 0个|二个|0个|0个|0个| 0 |
| 价值1| 0个|一个|二个|0个|0个| 0 |
| 价值2| 0个|三个|0个|0个|0个| 0 |
| 价值3|一个|一个|0个|0个|一个| 1 |
| 价值4| 0个|二个|0个|一个|0个| 0 |
| 价值观5|一个|二个|0个|0个|0个| 0 |
但我想知道正确的做法是什么?
先谢谢你。

vof42yt1

vof42yt11#

UNPIVOT列,然后PIVOT值:

SELECT *
FROM   table_name
UNPIVOT (
  value
  FOR columns IN (value1, value2, value3, value4, value5, value6, value7, value8)
)
PIVOT (
  COUNT(*)
  FOR value IN (1, 2, 3, 4, 5)
)

字符串
其中,对于样本数据:

CREATE TABLE table_name (customer, value1, value2, value3, value4, value5, value6, value7, value8) AS
SELECT 100, 1, 2, 5, 3, 2, 1, 2, 1 FROM DUAL UNION ALL
SELECT 100, 1, 3, 4, 3, 2, 5, 2, 1 FROM DUAL UNION ALL
SELECT 101, 3, 2, 2, 2, 2, 1, 2, 1 FROM DUAL UNION ALL
SELECT 101, 3, 2, 1, 2, 1, 3, 5, 2 FROM DUAL UNION ALL
SELECT 101, 2, 2, 5, 4, 2, 3, 4, 3 FROM DUAL;


输出:
| 立柱|一个|二个|三个|四个|五个| 5 |
| --|--|--|--|--|--| ------------ |
| 价值1|二个|0个|0个|0个|0个| 0 |
| 价值2| 0个|一个|一个|0个|0个| 0 |
| 价值3| 0个|0个|0个|一个|一个| 1 |
| 价值4| 0个|0个|二个|0个|0个| 0 |
| 价值5| 0个|二个|0个|0个|0个| 0 |
| 价值6|一个|0个|0个|0个|一个| 1 |
| 价值观7| 0个|二个|0个|0个|0个| 0 |
| 价值8|二个|0个|0个|0个|0个| 0 |
| 价值1| 0个|一个|二个|0个|0个| 0 |
| 价值2| 0个|三个|0个|0个|0个| 0 |
| 价值3|一个|一个|0个|0个|一个| 1 |
| 价值4| 0个|二个|0个|一个|0个| 0 |
| 价值5|一个|二个|0个|0个|0个| 0 |
| 价值6|一个|0个|二个|0个|0个| 0 |
| 价值观7| 0个|一个|0个|一个|一个| 1 |
| 价值8|一个|一个|一个|0个|0个| 0 |
fiddle

相关问题