2014-03-05 26 views
0
SELECT ITEM, TXNDate, RIGHT(CONVERT(VARCHAR(10),PREVDATE,6),7), RIGHT(CONVERT(VARCHAR(10),DATEADD(year,1,NEXTVDATE),6),7) FROM TABLE 

这个检索如下如何使用多个select语句的联合来获得排序日期?

------------------------------------------- 
ITEM | TXNDate |PREVDATE | NEXTDATE | 
------------------------------------------- 
item-A 03 Jan 13 Jan 13 Jan 14 
item-C 06 Jan 13 Jan 13 Jan 14 
item-B 08 Jan 13 Jan 13 Jan 14 
item-A 05 Feb 13 Feb 13 Feb 14 
item-B 07 Feb 13 Feb 13 Feb 14 
item-B 16 Mar 13 Mar 13 Mar 14 
item-A 03 Apr 13 Apr 13 Apr 14 
_______________________________________ 

在这里,我想显示日期在有序的方式

SELECT * INTO #DATES FROM (SELECT PREVDATE DATES from #DATA 
       UNION 
        SELECT NEXTDATE DATES from #DATA) p 
SELECT * FROM #DATES 

但我得到这个结果

---------- 
| DATES | 
---------- 
Apr 13 
Apr 14 
Feb 13 
Feb 14 
Jan 13 
Jan 14 
Mar 13 
Mar 14 
--------- 

请帮助我得到的结果为

---------- 
| DATES | 
---------- 
Jan 13 
Jan 14 
Feb 13 
Feb 14 
Mar 13 
Mar 14 
Apr 13 
Apr 14 
--------- 
+0

,想你想订购VARCHAR,因此problem.no需要插入和临时表,只是为了order.Most重要原因更改日期format.In DB总是将日期数据保留为日期时间/日期。您可以在显示时更改格式。还有三列日期。您是否想要分类哪一列? – KumarHarsh

回答

0

您可以再补充ORDER BY要贵上SELECT拿到日期以升序:

SELECT * INTO #DATES FROM (SELECT PREVDATE DATES from #DATA 
       UNION 
        SELECT NEXTDATE DATES from #DATA) p 
SELECT * FROM #DATES 
ORDER BY DATEPART(MONTH, CONVERT(DATE, '01 ' + DATES)), 
    DATEPART(YEAR, CONVERT(DATE, '01 ' + DATES)) 

当你的日期是字符串,你需要将它们转换为日期。然后获取月份和年份部分,因为这是您想要的订单。

+0

感谢Nicky ...我已经尝试了相同的解决方案,但是我选择的日期是varchar类型值 –

+0

@RupeshS啊,好的。然后我更新了我的答案。 – Szymon

+0

@RupeshS此外,只有现在才注意到,您希望按月先订购然后按年订购。更新了答案。 – Szymon

0

您希望在您的结果中订购是有点奇怪,因为你想要Jan 14之前Feb 13

没有ORDER BY子句,您永远不会确定记录的排序方式。包括本条款是必要的,因此,作为解释here

SELECT * INTO #DATES FROM 
    (SELECT PREVDATE DATES from #DATA 
    UNION 
    SELECT NEXTDATE DATES from #DATA 
) p 

SELECT * 
FROM #DATES 
ORDER BY DATES