簡體   English   中英

我如何在 PL/SQL [ORACLE] 中轉置和分組

[英]How do i transpose and grouping in PL/SQL [ORACLE]

我有這張桌子:

SELECT 
    USER, 
    DEP
FROM Table_1;
用戶 環保署
用戶1 DEP1
用戶2 DEP2
用戶3 DEP2
用戶4 DEP3

但我想轉置它並在DEP下對用戶進行分組。

DEP1 DEP2 DEP3
用戶1 用戶2 用戶4
用戶3 NULL NULL

我在 pivot 查詢之后嘗試了什么。

SELECT *
FROM
( 
    SELECT 
        USER,
        DEP
    FROM Table_1
) AS NewTable
PIVOT
(
  MAX(USER)
  FOR DEP IN ([DEP1],[DEP2],[DEP3])
) AS pvt;

output 是: 00933. 00000 - "SQL command not properly ended"

如何正確使用PIVOT

您可以給每個DEP類型一個行號,然后是 pivot:

SELECT dep1,
       dep2,
       dep3
FROM   (
  SELECT "USER",
         dep,
         ROW_NUMBER() OVER ( PARTITION BY dep ORDER BY ROWNUM ) AS rn
  FROM   table_1
)
PIVOT (
  MAX( "USER" )
  FOR DEP IN (
    'DEP1' AS dep1,
    'DEP2' AS dep2,
    'DEP3' AS dep3
  )
)
ORDER BY rn

其中,對於樣本數據:

CREATE TABLE table_1 ( "USER", DEP ) AS
SELECT 'USER1', 'DEP1' FROM DUAL UNION ALL
SELECT 'USER2', 'DEP2' FROM DUAL UNION ALL
SELECT 'USER3', 'DEP2' FROM DUAL UNION ALL
SELECT 'USER4', 'DEP3' FROM DUAL;

輸出:

  DEP1 |  DEP2 |  DEP3:---- |:---- |:---- USER1 | 用戶2 |  USER4 null | 用戶3 |  null

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM