0

私のSQLクエリは次のとおりです。

SELECT DISTINCT
   SUBSTRING(DATENAME(MONTH, PostDate), 1, 3) + '-' + CAST(YEAR(PostDate) AS VARCHAR(4)) AS PostArchive,
   Posts = COUNT(*) 
FROM    
   Post  WHERE Verified=1 
GROUP BY
   SUBSTRING(DATENAME(MONTH, PostDate), 1, 3) + '-' + CAST(YEAR(PostDate) AS VARCHAR(4)),
   YEAR(PostDate), MONTH(PostDate)

 ORDER BY PostArchive

その結果は次のようになります。

PostArchive 投稿
------------------------
2009年3月 1
2010年3月 1
2005 年 5 月 1
2011年5月 1
2012 年 5 月 1
2013 年 5 月 1

しかし、私はこのように日付(年)で結果を並べたいと思っています。

PostArchive 投稿
------------------------
2005 年 5 月 1
2009年3月 1
2010年3月 1
2011年5月 1
2012 年 5 月 1
2013 年 5 月 1

このリンクを検索して見つけましたが、問題を解決できません。

私は試します:

ORDER BY CONVERT(DateTime, PostArchive,101)  DESC

しかし、それは私にエラーを与えます:

Invalid column name 'PostArchive'.

これを行う方法はありますか、それとも間違っています。ありがとうございます。

4

5 に答える 5

1
  1. 本当は年単位で注文するつもりではなく、年月単位で注文したかったのだと思います。注文の問題は、日付ではなく文字として注文しているためです。
  2. 既に GROUP BY を使用しているため、DISTINCT は必要ありません。
  3. 主な問題は、すでに VARCHAR に変換されていることです。したがって、月はソートできません。

ssss

-- Create a CTE (inline view)

WITH T AS (
SELECT YEAR(PostDate) PostYear
     , MONTH(PostDate) PostMM
     , SUBSTRING(DATENAME(MONTH, PostDate),1,3) PostMonth
     , COUNT(*) Posts
  FROM Post
 WHERE Verified = 1
 GROUP BY YEAR(PostDate)
     , MONTH(PostDate)
     , DATENAME(MONTH, PostDate)
)
 -- Build you date string
SELECT PostMonth + '-' + CAST(PostYear AS VARCHAR(4)) AS PostArchive
     , Posts
  FROM T
   -- Sort it by the components separately
 ORDER BY PostYear
  -- Don't use the character, otherwise, Aug will come before Mar
     , PostMM
于 2013-05-05T15:51:52.553 に答える
0

試す

SELECT DISTINCT
   SUBSTRING(DATENAME(MONTH, PostDate), 1, 3) + '-' + CAST(YEAR(PostDate) AS VARCHAR(4)) AS PostArchive,
   Posts = COUNT(*) 
FROM    
   Post  WHERE Verified=1 
GROUP BY
   SUBSTRING(DATENAME(MONTH, PostDate), 1, 3) + '-' + CAST(YEAR(PostDate) AS VARCHAR(4)),
   YEAR(PostDate), MONTH(PostDate)
Order by Month(PostDate), Year(PostDate)
于 2013-05-05T12:35:35.773 に答える
0

CTEを使用して結果を取得しましたこれを試してください

with tempTable (PostArchiveMonth , PostArchiveYear , PostArchiveMonthName ,  Posts )
(
    select month(PostDate) , YEAR(PostDate) , SUBSTRING(DATENAME(MONTH, PostDate), 1, 3) 
           COUNT(*) 
    FROM Post  
    WHERE Verified=1 
    group by MONTH(PostDate) ,YEAR( PostDate)
    ,SUBSTRING(DATENAME(MONTH, PostDate), 1, 3) 
)

select PostArchiveMonthName +'-' + PostArchiveYear as PostArchive , Posts
from  tempTable 
order by PostArchiveYear  , PostArchiveMonth 
于 2013-05-05T12:31:11.203 に答える