oracle - 如何比较不同行中的相同列?

标签 oracle pivot-table

我提取了如下数据

Name   Session     CATEGORY   HT     WT     BMI
John   SESSION 1   OW         1.5    64.6   28.71
John   SESSION 3   OW         1.52   63.2   27.35
Eric   SESSION 1   OW         1.48   55.7   25.43
Eric   SESSION 3   OW         1.52   55.4   23.98

我想要以下格式

Name  session_1_Category  Session_1_height  session_1_weight  session_1_BMI  session_3_Category  Session_3_height  session_3_weight  session_3_BMI
John  OW                  1.5               64.6              28.71          OW                  1.52              63.2              27.35
Eric  OW                  1.48              55.7              25.43          OW                  1.52              55.4              23.98

我使用的是oracle数据库。请帮助我使用 SQL 查询来提取上述格式的数据。

最佳答案

在 Oracle 中,您可以使用 PIVOT:

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE TABLE_NAME ( Name, "Session", CATEGORY, HT, WT, BMI ) AS
SELECT 'John', 'SESSION 1', 'OW', 1.5,  64.6, 28.71 FROM DUAL UNION ALL
SELECT 'John', 'SESSION 3', 'OW', 1.52, 63.2, 27.35 FROM DUAL UNION ALL
SELECT 'Eric', 'SESSION 1', 'OW', 1.48, 55.7, 25.43 FROM DUAL UNION ALL
SELECT 'Eric', 'SESSION 3', 'OW', 1.52, 55.4, 23.98 FROM DUAL;

查询 1:

SELECT *
FROM   table_name
PIVOT(
  MAX( HT ) AS height,
  MAX( WT ) AS weight,
  MAX( BMI ) AS BMI
  FOR "Session" IN (
    'SESSION 1' AS Session_1,
    'SESSION 3' AS Session_3
  )
)

<强> Results :

| NAME | CATEGORY | SESSION_1_HEIGHT | SESSION_1_WEIGHT | SESSION_1_BMI | SESSION_3_HEIGHT | SESSION_3_WEIGHT | SESSION_3_BMI |
|------|----------|------------------|------------------|---------------|------------------|------------------|---------------|
| John |       OW |              1.5 |             64.6 |         28.71 |             1.52 |             63.2 |         27.35 |
| Eric |       OW |             1.48 |             55.7 |         25.43 |             1.52 |             55.4 |         23.98 |

关于oracle - 如何比较不同行中的相同列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302530/

相关文章:

mysql - 如何在mysql中透视一个有n行的表?

excel - 在 Excel 中创建逗号分隔值(使用数据透视表)?

python - 计算重复值、删除重复项并保留计数和其他列

sql - Oracle SQL - 如果空值是唯一的,则保留空值,否则避免空值

sql - 给定一列的总和,对行对/三元组进行排序

php - 所有查询都是大写的,带有 oracle 驱动程序和 laravel 查询生成器

laravel - 如何同步数据透视表中的附加字段 [Laravel 5]

oracle - 如何确定 Oracle APEX 中的主机名?

database - 检索包内存在的对象/记录的元数据 - Oracle 数据库

sql - SQL 复杂数据透视表