2

これは私の最初の投稿であり、誰かが私を助けてくれることを願っています. 私は決して DBA ではありませんが、MSSQL と MySQL でかなりの作業を行ってきました。しかし、私はこれを理解できないようです。複数の列で並べ替える方法は知っていますが、この場合、標準の「ORDER BY COL1、COL2、COL3」の回答では、Web アプリに表示したい順序でデータが取得されません。 mビル。これは MSSQL Express 2008 R2 にあります。

私が持っているクエリは、余分なデータを取得するための単純な結合がいくつか含まれているため、それほど複雑ではありません。同じインスタンス内のいくつかのデータベース間で実行されます。クエリの基本は次のとおりです。

select rt.TotalsID, rl.LookupName, rt.RegisterNum, cin.userFirstName, rt.CashInDate 
from [RegisterApp].[dbo].[Reg_Totals] rt 
inner join [RegisterApp].[dbo].[Reg_Lookup] rl on rl.LookupID = rt.StoreID 
inner join [KR_Users_Groups_Permissions].[dbo].[tbl_user] cin on cin.userId = rt.CashInUserID 
inner join [KR_Users_Groups_Permissions].[dbo].[tbl_user] cout on cout.userId = rt.CashOutUserID

rt.CashInDate、rl.LookupName、rt.RegisterNum の順で結果を並べたいと思います。ただし、前述したように、標準的な複数列の order by ステートメントだけでは、私のニーズは満たされません。問題のデータは任意の順序で入力できるため、そのように並べ替えた場合の結果は、実際には最新の日付 (rt.CashInDate desc) から順に並べられますが、rl.LookupName および rt.RegisterNum の値は時間の影響を受けます。最初の列で。結果で確認したいのは、日ごとに rl.LookupName が昇順で並べ替えられ、その中の rl.LookupName ごとに、各 rt.RegisterNum の結果も昇順で並べ替えられることです。

規格付き

order by rt.CashInDate desc, rl.LookupName, rt.RegisterNum

結果は、行ごとの rt.CashInDate によって異なります。たとえば、昨日の結果は、上記の order by ステートメントで次のように表示されます。

TotalsID  LookupName      RegisterNum     userFirstName   CashInDate
      12  Polyclinic      RG2             Joshua          2012-11-28 10:18:00
      13  Polyclinic      RG3             Joshua          2012-11-28 10:18:00
      11  Polyclinic      RG1             Joshua          2012-11-28 09:56:00
      10  Downtown        RG1             JJ              2012-11-28 08:22:00

私が見たいのは、次のように表示されるデータです。

TotalsID LookupName  RegisterNum userFirstName  CashInDate
10       Downtown    RG1         JJ             2012-11-28 08:22:00
11       Polyclinic  RG1         Joshua         2012-11-28 09:56:00
12       Polyclinic  RG2         Joshua         2012-11-28 10:18:00
13       Polyclinic  RG3         Joshua         2012-11-28 10:18:00

確かに、昨日の結果については rt.TotalsID が適切ですが、常にそうであるとは限りません。たとえば、26 日の結果を表示したい順に並べると、次のようになります。

TotalsID  LookupName  RegisterNum userFirstName  CashInDate
5         Downtown    RG1         JJ             2012-11-26 08:27:00
2         Polyclinic  RG1         Joshua         2012-11-26 07:33:00
3         Polyclinic  RG2         Joshua         2012-11-26 07:33:00
4         Polyclinic  RG3         Joshua         2012-11-26 07:33:00

この場合、rt.TotalsID が正しくないことに注意してください。

あまり運がなかったので、私はかなりハードに Google を攻撃してきました。おそらく、検索の言い回しが正しくないだけです。このリクエストが理解できるものであり、誰かが助けてくれることを願っています. 最後に、この順序でデータを取得することが絶対に必要というわけではありませんが、それは私が本当に見たいものです。

事前に助けとアドバイスをありがとう!

マラキ

4

1 に答える 1

0

@ニコラのコメントから:

CashInDate次の日付部分のみでソートする必要があります。

ORDER BY CAST(rt.CashInDate AS DATE) desc, rl.LookupName, rt.RegisterNum

于 2013-03-16T03:00:11.153 に答える