2017-01-03 9 views
0

私はその下に、このSQLクエリは、私の日付によって2順序を持っている必要がありますSQL 2つのオーダー異なる結果を与えることにより、

2016年2月1日 - 2017年3月1日

2月3日/ 2011 - 2016年7月7日

2010年12月22日 - 2016年7月7日

2016年2月1日 - 2016年2月1日

2010年12月22日 - 2013年7月7日

私は以下のクエリを使用する場合これが結果です。しかし、問題は、それが私が期待しているものではないということです。私はまず降順でDateEndを注文し、次にDateStartedを注文したいと思います。

 Select top 5 
    Case When dbo.VoluntaryWork.Organization + ' - ' + dbo.VoluntaryWork.OrganizationAddress = ' - ' 
      Then 'N/A' 
      Else dbo.VoluntaryWork.Organization + ' - ' + dbo.VoluntaryWork.OrganizationAddress end AS OrgAddress, 
    Case When isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateStarted, 101),'') = '' or isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateStarted, 101),'') = '01/01/1900' then 'N/A' else isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateStarted, 101),'') end AS DateStarted, 
    Case When isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateEnded, 101),'') = '' or isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateEnded, 101),'') = '01/01/1900' then 'N/A' else isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateEnded, 101),'') end AS DateEnded 
      From dbo.PersonVoluntaryWork 
    Inner Join dbo.VoluntaryWork ON dbo.PersonVoluntaryWork.VoluntaryWorksId = dbo.VoluntaryWork.VoluntaryWorksId 
     Where (dbo.PersonVoluntaryWork.PersonId = @PersonId) 
     Order By dbo.VoluntaryWork.DateEnded desc ,dbo.VoluntaryWork.DateStarted desc 
+3

その結果は、あなたが望むように_IS_注文しました。私が何かを見ていない限り。 – ZLK

+1

私は@ ZLKに同意しますDateEndはdescにあり、次にDateStartedはdescです.2行目と3行目の出力を見ると分かります。 – Edward

+0

@ZLK OMGGG!....私は盲目だと思う。私はちょうど '02/03/2011と02/01/2016'を見て、その年を見ていない。ありがとう。 – KiRa

答えて

0

こんにちは、メインのクエリの外から別のselect句を使用し、このようなorder by節を適用してください。これがうまくいくことを願っています。

SELECT * from (
SELECT top 5 case when dbo.VoluntaryWork.Organization + ' - ' + dbo.VoluntaryWork.OrganizationAddress = ' - ' then 'N/A' 
    else dbo.VoluntaryWork.Organization + ' - ' + dbo.VoluntaryWork.OrganizationAddress end AS OrgAddress, 
    case when isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateStarted, 101),'') = '' or isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateStarted, 101),'') = '01/01/1900' then 'N/A' else isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateStarted, 101),'') end AS DateStarted, 
    case when isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateEnded, 101),'') = '' or isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateEnded, 101),'') = '01/01/1900' then 'N/A' else isnull(CONVERT(varchar(10), dbo.VoluntaryWork.DateEnded, 101),'') end AS DateEnded, 
    FROM   dbo.PersonVoluntaryWork INNER JOIN 
         dbo.VoluntaryWork ON dbo.PersonVoluntaryWork.VoluntaryWorksId = dbo.VoluntaryWork.VoluntaryWorksId 
WHERE  (dbo.PersonVoluntaryWork.PersonId = @PersonId) 
    ORDER BY dbo.VoluntaryWork.DateEnded DESC 
    ) A ORDER BY A.DateStarted 
関連する問題