最佳答案
如果 SQL-Server
。
首先创建一个临时表、表变量或常规表来存储每个月的订单。
我刚刚创建了一个普通表。
CREATE TABLE tbl_month
(
Months VARCHAR(3), [order] INT
);
INSERT INTO tbl_month VALUES
('JAN',1),
('FEB',2),
('MAR',3),
('APR',4),
('MAY',5),
('JUN',6),
('JUL',7),
('AUG',8),
('SEP',9),
('OCT',10),
('NOV',11),
('DEC',12);
然后拆分每个逗号分隔值并将其与上面的表变量连接以获取月份订单,并将结果集存储到一个临时文件中以便于使用。
SELECT t1.*, t2.[order] into #temp_table from
(
SELECT A.qtr, Split.a.value('.', 'VARCHAR(100)') as Months FROM
(
SELECT qtr,
CAST ('<M>' + REPLACE(Months, ',', '</M><M>') + '</M>' AS XML) AS Months
FROM my_table_name
) AS A CROSS APPLY Months.nodes ('/M') AS Split(a))t1
JOIN tbl_month t2
ON t1.Months = t2.Months
ORDER BY t1.qtr;
上面的查询将创建一个临时表,如下所示。
+---------+--------+-------+
| qtr | Months | order |
+---------+--------+-------+
| 2015-Q1 | MAR | 3 |
| 2015-Q1 | JAN | 1 |
| 2015-Q1 | FEB | 2 |
| 2015-Q2 | APR | 4 |
| 2015-Q2 | JUN | 6 |
| 2015-Q2 | MAY | 5 |
| 2015-Q3 | SEP | 9 |
| 2015-Q3 | AUG | 8 |
| 2015-Q3 | JUL | 7 |
| 2015-Q4 | OCT | 10 |
| 2015-Q4 | DEC | 12 |
+---------+--------+-------+
然后按每个 qtr
的月份顺序连接月份。
SELECT qtr,
STUFF
(
(
SELECT ',' + Months
FROM #temp_table AS t2
WHERE t2.qtr = t.qtr
ORDER BY [order]
FOR XML PATH('')
),1,1,'') as Months
FROM #temp AS t
GROUP BY qtr
ORDER BY qtr;
结果
+---------+-------------+
| qtr | Months |
+---------+-------------+
| 2015-Q1 | JAN,FEB,MAR |
| 2015-Q2 | APR,MAY,JUN |
| 2015-Q3 | JUL,AUG,SEP |
| 2015-Q4 | OCT,DEC |
+---------+-------------+
关于mysql - 有没有办法让月份在表格的单元格中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35648155/