如果我在 Oracle 表的一列中有資料
A1
A2
C1
D2
B1
C2
B3
D4
A3, and so on
如何讓 skript 像這樣對更多列中的資料進行排序
A1 B1 C1 D2
A2 B3 C2 D4
A3
uj5u.com熱心網友回復:
這是一種選擇。
樣本資料:
SQL> select * from test;
CO
--
A1
A2
C1
D2
B1
C2
B3
D4
A3
9 rows selected.
詢問:
tempcte 回傳源表中每一行的行號temp2計算“組”(使 4 列構成一行),同時rn2表示該行中每一列的位置(從位置 1 到位置 4)- 最終查詢只在每個“新創建的”列(最多 4 個)中為每個組回傳一個列值。
SQL> with temp as
2 (select col,
3 row_number() over (order by rowid) rn
4 from test
5 ),
6 temp2 as
7 (select col,
8 ceil(rn / 4) grp,
9 case when mod(rn - 4, 4) = 0 then 4
10 when mod(rn - 4, 3) = 0 then 3
11 when mod(rn - 4, 2) = 0 then 2
12 else 1
13 end rn2
14 from temp
15 )
16 select min(case when rn2 = 1 then col end) c1,
17 min(case when rn2 = 2 then col end) c2,
18 min(case when rn2 = 3 then col end) c3,
19 min(case when rn2 = 4 then col end) c4
20 from temp2
21 group by grp;
C1 C2 C3 C4
-- -- -- --
C1 A2 A1 D2
B1 C2 B3 D4
A3
SQL>
uj5u.com熱心網友回復:
我認為不可能完全按照您顯示的方式“壓縮”匯總結果。請記住,您正在處理結構化資料和關系。
在您的示例中,您顯示了第一個元組:
A1 B1 C1 D2
然而,在真實表中,A1 B1 C1 D2 都沒有相互關聯(橫向)。
您可以在 SELECT 子句中使用多個 CASE 陳述句來確定在哪個“結果集”列中顯示資料。這會給你類似的結果:
A. B. C. D.
-------------------
A1. null null null
A2. null null null
null null C1. null
...
稍后由您的程式讀取結果并洗掉空值。
select
case value when 0 then 1 else null end as A,
case value when 1 then 1 else null end as B,
case value when 2 then 1 else null end as C,
case value when 3 then 1 else null end as D,
case value when 4 then 1 else null end as E
from events
我看到的“缺點”是您必須定義“硬編碼”列,這可能會或可能不會被接受(根據您的用例)
SQL小提琴:http ://sqlfiddle.com/#!9/ 63dd887
uj5u.com熱心網友回復:
這最好在中間層應用程式(Java、C#、PHP 等)中完成,但如果您想在 SQL 中完成,您可以PIVOT:
SELECT a, b, c, d
FROM (
SELECT value,
MOD(ROWNUM - 1, 4) AS col,
CEIL(ROWNUM/4) AS rw
FROM table_name
)
PIVOT(MAX(value) FOR col IN (0 AS A, 1 AS B, 2 AS C, 3 AS D))
ORDER BY rw
其中,對于樣本(隨機)資料:
CREATE TABLE table_name (value) AS
SELECT CHR(64 FLOOR(DBMS_RANDOM.VALUE(1,5))) || FLOOR(DBMS_RANDOM.VALUE(1,5))
FROM DUAL
CONNECT BY LEVEL <= 42;
可能輸出:
一種 乙 C D B2 D1 C4 D3 C3 B3 C2 A1 A3 B2 B4 D1 A2 B4 D1 B1 C3 D2 C4 D4 C4 D1 D4 B3 C2 C3 A4 C1 D3 A4 B4 A3 A4 C3 C1 A2 B2 C4 A2 B3 D1 C2
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331630.html
