如果沒有你想怎麼你的輸出也很難知道您打算什麼一個例子,但:具有作爲發揮體育列
和列應包含的球員的名字排序遞增
你並不需要使用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()
分析函數將生成一個唯一的每運動數,因此聚合函數將只能在單個值上運行,因此使用什麼聚合函數並不重要。
「有欄作爲體育運動,列應包含球員的名字」你已經有這兩列;爲什麼你需要一個數據透視表,而不僅僅是對結果集進行排序? – MT0
我正在學習關鍵。只是想實現它 –
請用[MCVE]更新您的問題,包括樣本數據的預期輸出示例。 – MT0