我有一个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
对于输出的每三个记录,我需要一个如上所述的重复值。
答案 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