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

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

我提取了如下数据

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:

:


这是另一个不使用透视表的解决方案,可以跨平台工作-

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