社区首页 >问答首页 >按月排序,然后按MonthYear为字符串SQL的年份进行排序。

按月排序,然后按MonthYear为字符串SQL的年份进行排序。
EN

Stack Overflow用户
提问于 2014-11-12 12:29:27
回答 1查看 103关注 0票数 0
代码语言:javascript
代码运行次数:0
复制
declare @ActivityYearStart int = 2014
declare @ActivityYear2 int = (@ActivityYearStart + 2)
declare @ActivityYearEnd int = 2015
declare @ActivityYearM1 int = (@ActivityYearEnd - 1)
declare @ActivityMonth int = 1
declare @ActivityMonth1 int = 3

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)  


select @cols = STUFF((SELECT distinct ',' + QUOTENAME((CONVERT(varchar(5), ActivityMonth) + '-' 
                + CONVERT(varchar(5), ActivityYear))) As MonthYear
            FROM Forecast
            WHERE((ActivityYear = @ActivityYearStart)
              AND (ActivityMonth between  @ActivityMonth and 12))
              OR ((ActivityYear between @ActivityYear2 and @ActivityYearM1)
              AND (ActivityMonth between 1 and 12))
              OR ((ActivityYear = @ActivityYearEnd) 
              AND (ActivityMonth between 1 and @ActivityMonth1))
                     AND Category = 'Forecast'
           Group By Category, ID, ActivityMonth, ActivityYear
           Order By SUBSTRING(MonthYear, 1, 2), SUBSTRING(MonthYear, 2, 4)
        FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query = '  
    SELECT Category, ID, ' + @cols + ' FROM
             (
                SELECT Category, ID, (CONVERT(varchar(5), ActivityMonth) + ''-'' 
                + CONVERT(varchar(5), ActivityYear)) As MonthYear, HoursCharged
                FROM Forecast    
            ) x
            PIVOT 
            (
                Sum(HoursCharged)
                for MonthYear in (' + @cols + ')
            ) p '

execute(@query)

因为MonthYear是活动月份和活动年的串联字符串,所以从行到列。我想按月份年排序,但是,它现在是一个字符串,它是一个字符串值,而不是int值。我如何才能把它分解成Order By SUBSTRING(MonthYear, 1, 2), SUBSTRING(MonthYear, 2, 4)

但我知道错误是:

Msg 207,第16级,状态1,第23线 无效的列名‘月’。 Msg 207,第16级,状态1,第23线 无效的列名‘月’。 Msg 145,15级,状态1,第12线 如果指定select DISTINCT,则按项排序必须出现在选择列表中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 13:22:18

尝试将@cols声明替换为:

代码语言:javascript
代码运行次数:0
复制
select @cols = STUFF((SELECT ',' + QUOTENAME((CONVERT(varchar(5), ActivityMonth) + '-' 
                + CONVERT(varchar(5), ActivityYear))) As MonthYear
            FROM Forecast
            WHERE((ActivityYear = @ActivityYearStart)
              AND (ActivityMonth between  @ActivityMonth and 12))
              OR ((ActivityYear between @ActivityYear2 and @ActivityYearM1)
              AND (ActivityMonth between 1 and 12))
              OR ((ActivityYear = @ActivityYearEnd) 
              AND (ActivityMonth between 1 and @ActivityMonth1))
                     AND Category = 'Forecast'
           Group By ActivityMonth, ActivityYear
           Order By ActivityYear, ActivityMonth
        FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26895961

复制
相关文章
字符串排序----排序算法的选择
对字符串的排序可以使用前面的通用排序算法,但有些专用的字符串排序算法将比通用排序算法效率更高,它们突破了NlogN的时间下界。 算法 是否稳定 原地排序 运行时间 额外空间 优势领域 低位优先的字符串排序 是 否 NW N 较短的定长字符串 高位优先的字符串排序 是 否 N到Nw之间 N+WR 随机字符串 三向字符串快速排序 否 是 N到Nw之间 W+logN 通用排序算法,特别适用于 含有较长公共前缀的字符串 字母表的长度为R,字符串的长度为N,字符串平均长度为w,最大长度为W。
SuperHeroes
2018/05/30
1.2K0
字符串排序----高位优先的字符串排序
上一篇:低位优先的字符串排序 高位优先字符串排序是一种递归算法,它从左到右遍历字符串的字符进行排序。和快速排序一样,高位优先字符串排序算法会将数组切分为能够独立进行排序的子数组进行排序,但它的切分会为每个首字母得到一个子数组,而非像快排那样产生固定的两个或三个数组。 本算法也是基于键索引记数法来实现的。该算法的核心思想是先使用键索引记数法根据首字符划分成不同的子数组,然后递归地处理子数组,用下一个字符作为键索引记数法的键处理子数组。 因为是不同长度的字符串,所以要关注字符串末尾的处理情况。合理的做法是将所有
SuperHeroes
2018/05/30
2.4K3
字符串排序----低位优先的字符串排序
基于键索引记数法来实现 低位优先的字符串排序能够稳定地将定长字符串进行排序。 生活中很多情况需要将定长字符串排序,比如车牌号、身份证号、卡号、学号...... 算法思路:低位优先的字符串排序可以通过键索引记数法来实现----从右至左以每个位置的字符作为键,用键索引记数法将字符串排序W遍(W为字符串的长度)。稍微思考下就可以理解,因为键索引记数法是稳定的,所以该方法能够产生一个有序的数组。 public class LSD { public static void sort(String[]a,int
SuperHeroes
2018/05/30
1.5K0
delphi数组排序_sql排序函数
var m_bSort: boolean=false; //控制正反排序的变量 //ListView排序的回调函数,默认的是快速排序法,也可以自己在这里做算法 function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall; var txt1,txt2 : string; begin if ParamSort <> 0 then begin try txt1 := Item1.SubItems.Strings[ParamSort-1]; txt2 := Item2.SubItems.Strings[ParamSort-1]; if m_bSort then begin Result := CompareText(txt1,txt2); end else begin Result := -CompareText(txt1,txt2); end; except end;
全栈程序员站长
2022/11/09
7910
python中选择排序法对数组进行升序排序_sort函数对字符串数组排序
先说一下三者的区别 sort, sorted 是用在 list 数据类型中的排序方法 argsort 是用在 numpy 数据类型中的排序方法( numpy 里也有一个 sort 方法,下面会讲)
全栈程序员站长
2022/09/22
3K0
SQL排序(一)
排序规则指定值的排序和比较方式,并且是InterSystems SQL和InterSystemsIRIS®数据平台对象的一部分。有两种基本排序规则:数字和字符串。
用户7741497
2022/06/06
1.5K0
SQL排序(二)
InterSystems SQL提供了排序规则功能,可用于更改字段的排序规则或显示。
用户7741497
2022/06/06
1.6K0
mysql对数值类型字符串进行排序
在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,mysql进行的排序规则是按照ASCII码进行排序的,并不会自动的识别出这些数据是数值,就会出现比如要排序的字段值是1,2,3,11,12,排序完的结果会变成1,11,12,2,3,
earthchen
2020/09/24
2.8K0
SQL 混合排序
本文的写作思路是来自群友分享在群里的一道练习题,笔者觉得这道题有点小难度,且这类需求也比较常见。具体的需求描述请看下图。
白日梦想家
2021/01/04
8780
SQL 混合排序
SQL 动态排序
有时候,我们希望依据某些条件逻辑来排序。比如,对于员工表 emp,我们希望按照薪资(sal )从低到高排序。有一个要求,处于管理岗位的职工排在普通员工的后面,即 job 等于 MANAGER 或 PRESIDENT 的员工排在其它员工的后面,job 等于 PRESIDENT 的员工放在最后。也就是说,优先按照职位(job)的规则排序,再按照薪资(sal)排序。
白日梦想家
2020/07/18
1.4K0
SQL 动态排序
【Java 进阶篇】使用 SQL 进行排序查询
在数据库中,我们经常需要对查询的结果进行排序,以便更容易地理解和分析数据。SQL(Structured Query Language)提供了强大的排序功能,允许我们按照指定的列对数据进行升序或降序排序。本文将详细介绍如何使用 SQL 进行排序查询,包括基本的排序语法、多列排序、自定义排序顺序等内容。
繁依Fanyi
2023/10/12
3950
【Java 进阶篇】使用 SQL 进行排序查询
字符串排序
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
6090
字符串排序----三向字符串快速排序
上一篇:高位优先的字符串排序 该算法思路与高为优先的字符串排序算法几乎相同,只是对高位优先的字符串排序算法做了小小的改进。 思路:根据键的首字母进行三向切分,然后递归地将三个子数组进行排序。 三向字符串快速排序实现并不困难,只需对三向快排代码做些修改即可: 代码中的charAt(String[] a,int d)方法是获取下标d处的字符,exch()是交换函数。 public class Quick3string { private static int charAt(String s, int d
SuperHeroes
2018/05/30
1.6K0
非比较排序--基数排序实现给字符串数组排序
前面学习了计数排序,可以实现O(n+k)的时间复杂度,但是他有很大的局限性,最大的问题就是如果最大值和最小值之间相差太大的话,那么会浪费掉很大的空间,比如要排序{1,10000,99,64,120}我们可以根据之前的计算公式最大值减去最小值加一得到计数数组的长度,那么计数数组长度就应该是10000,但是实际上我们只存放了5个数据,中间浪费了极大的空间,所以在使用计数排序时,应该根据自己的实际情况来决定。
大猫的Java笔记
2020/09/30
9300
where in的sql语句按照指定ID进行排序的解决方法
做网站的时候需要一个需求,需要按照指定的ID获取数据库中的数据,返回数据的顺序要和指定ID的顺序相同,数据库是SQL Server的,下面的代码是在网上找来的,SQL server的已经测试过,可以满足要求。 Access: select * From 表 Where id in(1,5,3) order by instr(',1,5,3,',','&id&',') MSSQL: select * From 表 Where id in(1,5,3) order by charindex(','+rtrim(
磊哥
2018/05/09
1K0
python对字典进行排序
标准的python字典是无序的。即使对(键、值)对进行了排序,也无法以保留排序的方式将它们存储在dict中。
IT工作者
2022/07/07
1.9K0
Mysql常用sql语句(7)- order by 对查询结果进行排序
https://www.cnblogs.com/poloyy/category/1683347.html
小菠萝测试笔记
2020/06/09
2.9K0
Mysql常用sql语句(7)- order by 对查询结果进行排序
SQL - nulls值排序问题
当我们使用order by来为指定的字段进行排序时,如果db中该字段的值存在着null值,那么在排序时这些null值会不会参与排序呢?如果参与排序的话,又是以怎样的标准来排序?
雨临Lewis
2022/01/11
1.4K0
SQL基础-->过滤和排序
--=======================================
Leshami
2018/08/07
6620
对成绩进行排序c语言_c语言对学生成绩进行排序
scanf(“%d%s%d”,&buf[i].number,buf[i].name,&buf[i].score);
全栈程序员站长
2022/11/09
1.2K0

相似问题

首先按年份,然后按月对列表进行排序

22

按年份,然后按月对日期进行排序的典型ASP列表

20

Javascript排序日期按年份( DESC )排列,然后按月份( ASC )排序,然后按日期( ASC )排序。

14

如何按月排序年份?

116

在php / sql中按年排序日期,然后按月排序

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档