Oracle 如何比较不同行中的相同列?
我提取了如下数据 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架构设置: 问题1: :Oracle 如何比较不同行中的相同列?,oracle,pivot-table,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
这是另一个不使用透视表的解决方案,可以跨平台工作-
SELECT NAME
,MAX(CASE WHEN Session = 'SESSION 1' THEN CATEGORY END) AS session_1_Category
,MAX(CASE WHEN Session = 'SESSION 1' THEN HT END) AS Session_1_height
,MAX(CASE WHEN Session = 'SESSION 1' THEN HT END) AS session_1_weight
,MAX(CASE WHEN Session = 'SESSION 1' THEN HT END) AS session_1_BMI
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS session_3_Category
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS Session_3_height
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS session_3_weight
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS session_3_BMI
FROM YOUR_TABLE
GROUP BY NAME
在OracleAre中查找Pivot在数据中每个名称只有2个会话?因此John的“会话3”在结果中成为会话2,因为这是alfabet订购的第二个会话?是的,每个名称最多有2个会话,但对于某些名称,只有会话1,在这种情况下,会话2数据应该为空。您是否考虑过按名称、会话和在应用程序或网站的网格或表格中进行布局从mytable order中选择*?对我来说,这似乎是一种直截了当的方式,而且非常灵活,例如,将来动态检测两个以上的会话。谢谢。我使用了类似于select*from select*的透视图,它来自于某个表,其中的某个条件=“某个值”透视图透视图条件;如果我想比较第1课时的身高和第3课时的身高,以及第1课时的体重和第3课时的体重,我该怎么做?e、 g.如果会话\u 1\u高度=会话\u 3\u高度,则高度\u状态=真实的其他高度\u状态=错误如果会话\u 1\u重量=会话\u 3\u重量,则重量\u状态=真实的其他重量\u状态=错误
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
)
)
| 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 |
SELECT NAME
,MAX(CASE WHEN Session = 'SESSION 1' THEN CATEGORY END) AS session_1_Category
,MAX(CASE WHEN Session = 'SESSION 1' THEN HT END) AS Session_1_height
,MAX(CASE WHEN Session = 'SESSION 1' THEN HT END) AS session_1_weight
,MAX(CASE WHEN Session = 'SESSION 1' THEN HT END) AS session_1_BMI
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS session_3_Category
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS Session_3_height
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS session_3_weight
,MAX(CASE WHEN Session = 'SESSION 3' THEN HT END) AS session_3_BMI
FROM YOUR_TABLE
GROUP BY NAME