2017-09-25 45 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 –

相關問題