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

时间:2014-06-10 05:50:34

标签: 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 |   14 1  
Apr'13 |   15 2  
May'13 |   11 2 
Jun'13 |   14 2

对于输出的每三个记录,我需要一个如上所述的重复值。

6 个答案:

答案 0 :(得分:1)

尝试以下查询:

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"格式。例如:Jan'13 => 1 Jan 13 然后使用DATEPART获取Quarter。

答案 1 :(得分:0)

这是你想要的吗?

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

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

答案 2 :(得分:0)

补充上一个答案(Gordon Linoff)

declare @TestTable table (months varchar(20), [output] int)

insert into @TestTable
values
('Jan''13',     10),
('feb''13',     12),
('Mar''13',     14),
('Apr''13',     15),
('May''13',     11),
('Jun''13',     14)

SELECT 
  (ROW_NUMBER() OVER(order by ([output])) + 2) / 3 AS 'quarter', 
    months, [output]
FROM @TestTable

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

答案 3 :(得分:0)

以下SQL应该有效:

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

这是创建格式' 1 /'的日期。 +月名+' /' +年并获得该领域所属的季度。

答案 4 :(得分:0)

可能会有所帮助:

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_FORMAT(NOW(),'%y\'%b')而不是您的Months值)

答案 5 :(得分:0)

DECLARE @TestTable table (months VARCHAR(10),output INT)
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], CASE LEFT(REPLACE(months,'''',''),3) WHEN   'Jan' THEN 1 
            WHEN 'feb' THEN 1
            WHEN 'Mar' THEN 1
            WHEN 'Apr' THEN 2
            WHEN 'May' THEN 2
            WHEN 'Jun' THEN 2
          END As Monthss
FROM @TestTable
ORDER BY DATEPART(QUARTER,REPLACE('1 ' + months,'''',' ')) ,3