修复了sql select查询中的重复值

修复了sql select查询中的重复值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个sql select语句,它返回如下记录 Months | Output -------+------- Jan'13 | 10 feb'13 | 12 Mar'13 | 14 Apr'13 | 15 May'13 | 11 Jun'13 | 14 Months | Output Quarter -------+--------------- Jan'13 | 10 1 feb'13 | 12 1 Mar'13

我有一个sql select语句,它返回如下记录

Months | Output 
-------+-------
Jan'13 |   10  
feb'13 |   12   
Mar'13 |   14   
Apr'13 |   15   
May'13 |   11  
Jun'13 |   14
Months | Output Quarter   
-------+---------------
Jan'13 |   10 1  
feb'13 |   12 1  
Mar'13 |   14 1  
Apr'13 |   15 2  
May'13 |   11 2 
Jun'13 |   14 2
现在我希望查询的输出如下所示

Months | Output 
-------+-------
Jan'13 |   10  
feb'13 |   12   
Mar'13 |   14   
Apr'13 |   15   
May'13 |   11  
Jun'13 |   14
Months | Output Quarter   
-------+---------------
Jan'13 |   10 1  
feb'13 |   12 1  
Mar'13 |   14 1  
Apr'13 |   15 2  
May'13 |   11 2 
Jun'13 |   14 2
对于输出的每三个记录,我需要一个如上所述的重复值

这就是你想要的吗

select t.months, t.output,
       ((row_number() over (order by months) + 2) / 3) as quarter
from (your query here) t

或者,您可能希望将
quarter
选项设置为
datepart()
,但问题中没有足够的信息来解释如何执行此操作。

补充前面的答案(Gordon Linoff)


您必须为数据设置正确的ORDER BY。

以下SQL应该可以工作:

select Months, Output, DATEPART(Q, '1/' + SUBSTRING(Months, 1, 3) + '/' + SUBSTRING(Months, 5, 2)) as Quarter

这将创建格式为“1/”+monthname+“/”+year的日期,并获取该字段所属的季度

尝试以下查询:

INSERT INTO @TestTable
VALUES
       ('Jan''13', 10),
       ('feb''13', 12),
       ('Jun''13', 14),
       ('Mar''13', 14),
       ('Apr''13', 15),
       ('May''13', 11)

SELECT      months, [output], 
            DATEPART(QUARTER,REPLACE('1 ' + months,'''',' ')) AS Quarter
FROM        @TestTable
ORDER BY    3 -- Quarter
月份格式“mmm'yy”转换为“1 mmm yy”格式。例:
2013年1月=>2013年1月1日

然后使用DATEPART获取季度数据。

这可能会有帮助:

mysql> SELECT FIND_IN_SET( LOWER( SUBSTRING( DATE_FORMAT(NOW(),'%y\'%b') , 4, 3) ) ,'jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec') DIV 4 + 1 AS Quarter;

+---------+
| Quarter |
+---------+
|       2 |
+---------+

(我使用了
DATE\u格式(现在(),'%y\'%b')
而不是您的
Months
值)

Months列的数据类型是什么?它是Varchar类型@uril,预计2014年1月的季度为1,对吗?不。。2014年1月5日,2014年4月6日。。它一直持续到我的查询返回的记录存在为止@Uriil@user3383390检查我的答案…我只需要一种方法将月份分组为季度,以便在SSRS报告中使用。所以我想,通过对每三条记录重复一个值,我可以有一个列,用于将记录分组为quarter。如果要在SSRS中获得quarter,只需使用DatePart(DateInterval.quarter,)函数。当然,您首先需要将月份字符串转换为日期时间类型。当我使用上述代码时,记录会按月份分组。对于apr13,apr14和apr15的输出是1,对于aug13,aug14,aug15的输出是2…你应该使用一个实际的日期值,它的顺序与月份相同。正如我所说的,你必须通过设置正确的顺序。我不知道您有什么表模式。如果有日期时间字段,则按其排序。I months是datetime(但其他格式)将其转换,然后按月份排序。另一种情况-做一些正确的事情。您甚至可以对它进行一些子查询(如Gordon LInoff所示)