mysql - 有没有办法让月份在表格的单元格中排序

标签 mysql sql-server

我有一个包含以下数据的表:

enter image description here

有没有一种方法可以选择月份列,使月份不按字母顺序显示,而是按以逗号分隔的日历月份排序?例如,第二行应该返回 APR,MAY,JUN 而不是 APR,JUN,MAY。

最佳答案

如果 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/

相关文章:

mysql - 如何编写AJAX代码将PHP错误打印到alert()框?

sql-server - 你能优化这段代码吗? T-SQL

sql - 如何在 SQL Server 2008 上安装全文搜索

sql-server - 日期相关性的优化不会改变计划

MySql 分组并包含 null

php - MySQL 查询 - 检索仅包含字母和空格的行

mysql - 在木兰: Replacing H2 with MySQL: JackRabbit Cannot instantiate persistence manager

mysql - 如何使用 mySQL 根据开始日期设置和结束日期值

sql-server - 临时表 : CREATE vs. SELECT INTO

sql-server - 用于存储大型日志表的数据库