我有这张
Level 1
桌子
我想做查询,查询执行时J1,J2.. J5的顺序是随机的
我有这个疑问
SELECT j1,j2,j3,j4,j5 FROM `level_1` ORDER BY RAND()
我有一种感觉,这应该是重复的,但找不到一个,所以..使用 union all 进行逆透视,分配一个随机行号,然后聚合
CREATE TABLE T (
ID INT AUTO_INCREMENT PRIMARY KEY, J1 INT,J2 INT,J3 INT,J4 INT,J5 INT);
INSERT INTO T VALUES
(1,1,2,3,4,5),(2,10,20,30,40,50);
WITH CTE AS
(
SELECT ID,1 AS COL, J1 FROM T
UNION ALL
SELECT ID,2 AS COL, J2 FROM T
UNION ALL
SELECT ID,3 AS COL, J3 FROM T
UNION ALL
SELECT ID,4 AS COL, J4 FROM T
UNION ALL
SELECT ID,5 AS COL, J5 FROM T
),
CTE1 AS
(SELECT * ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RAND()) RN FROM CTE)
SELECT ID,
MAX(CASE WHEN RN = 1 THEN J1 END) COL1,
MAX(CASE WHEN RN = 2 THEN J1 END) COL2,
MAX(CASE WHEN RN = 3 THEN J1 END) COL3,
MAX(CASE WHEN RN = 4 THEN J1 END) COL4,
MAX(CASE WHEN RN = 5 THEN J1 END) COL5
FROM CTE1
GROUP BY ID
ORDER BY ID;