2017-09-25 169 views
0

我有一个表Players它有两列:NameSport_Played。 的样本数据是这样的:在下面的pivot子句中使用哪个聚合函数?

Name.  Sport _played 
Ravi   Cricket 
Raju   Cricket 
Ronaldo  Football 
Messi   Football 
Anand  Chess 

我想转动具有与发挥体育列的表和列应包含的玩家递增排序的名称。

Cricket   Football   Chess 
Raju    Messi   Anand 
Ravi    Ronaldo  Null 

的问题是,枢轴需要聚合函数。什么聚合函数用来显示玩家的名字作为体育栏目的一部分。谢谢。

+0

“有栏作为体育运动,列应包含球员的名字”你已经有这两列;为什么你需要一个数据透视表,而不仅仅是对结果集进行排序? – MT0

+0

我正在学习关键。只是想实现它 –

+0

请用[MCVE]更新您的问题,包括样本数据的预期输出示例。 – MT0

回答

1

如果没有你想怎么你的输出也很难知道您打算什么一个例子,但:具有作为发挥体育列

和列应包含的球员的名字排序递增

你并不需要使用PIVOT,您可以使用LISTAGG

SQL Fiddle

的Oracle 11g R2架构设置

CREATE TABLE players (Name, Sport_played) AS 
SELECT 'Ravi', 'Cricket' FROM DUAL UNION ALL 
SELECT 'Raju', 'Cricket' FROM DUAL UNION ALL 
SELECT 'Ronaldo', 'Football' FROM DUAL UNION ALL 
SELECT 'Messi', 'Football' FROM DUAL UNION ALL 
SELECT 'Anand', 'Chess' FROM DUAL; 

查询1

SELECT sport_played, 
     LISTAGG(name, ',') WITHIN GROUP (ORDER BY name) As names 
FROM players 
GROUP BY sport_played 

Results

| SPORT_PLAYED |   NAMES | 
|--------------|---------------| 
|  Chess |   Anand | 
|  Cricket |  Raju,Ravi | 
|  Football | Messi,Ronaldo | 

更新

SQL Fiddle

的Oracle 11g R2架构设置

CREATE TABLE players (Name, Sport_played) AS 
SELECT 'Ravi', 'Cricket' FROM DUAL UNION ALL 
SELECT 'Raju', 'Cricket' FROM DUAL UNION ALL 
SELECT 'Ronaldo', 'Football' FROM DUAL UNION ALL 
SELECT 'Messi', 'Football' FROM DUAL UNION ALL 
SELECT 'Anand', 'Chess' FROM DUAL; 

查询1

SELECT * 
FROM (SELECT p.*, 
       ROW_NUMBER() OVER (PARTITION BY Sport_played 
            ORDER BY name) AS rn 
      FROM players p) 
PIVOT (
    MAX(Name) 
    FOR Sport_Played IN (
    'Cricket' As Cricket, 
    'Football' As Football, 
    'Chess' AS Chess 
) 
) 

Results

| RN | CRICKET | FOOTBALL | CHESS | 
|----|---------|----------|--------| 
| 1 | Raju | Messi | Anand | 
| 2 | Ravi | Ronaldo | (null) | 

您可以使用在PIVOT包括MAX(name)MIN(name)甚至LISTAGG(name, ',') WITHIN GROUP (ORDER BY Name)任何(串)聚集功能。 ROW_NUMBER()分析函数将生成一个唯一的每运动数,因此聚合函数将只能在单个值上运行,因此使用什么聚合函数并不重要。

+0

感谢您的答案@ MT0。我同意我的不好,但现在我编辑了这个问题。你现在可以帮助我吗? –

+1

@JotWaraich更新 – MT0

+0

你能解释MAX(Name)如何在这里工作吗? @ MT0 –

相关问题