我提取了如下数据
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
:
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/