0

これらのクエリをテストするために、Microsoft Access の SQL クエリ ウィザードで実行しています。優先度の高いステータス アラート (O および P) を上部に表示するために、既存の php ファイルを変更しようとしています。これらのアラートは、opslogid によって降順で並べられます。O および P ステータス アラートがなくなったら、残りのステータス アラート (A、I、R) を opslogid の降順で並べて表示したいと考えています。これは、サンプル データと必要な出力です。

tblOpslog

opslogid = 9999, 9998, etc.

status = R, O, I, A, P

opslogid                               status

9999                                       P

9996                                       P

9994                                       O

9991                                       O

9998                                       I

9997                                       I

9980                                       A

9979                                       A

9978                                       A

9930                                       R

9928                                       R

私の同僚は、union all コマンドを使用することを提案しました。その結果、次のようになりました。

注:「<code>WHERE DELETED AND NO VIEW はクエリに残してはなりません。データベースの出力では重要です」。また、データベース自体を変更することはできません。

select * from (SELECT * FROM tblOpslog
Where Deleted = No AND Noview = No AND status in ('O','P'))
union all
select * from (Select * FROM tblOpslog Where Deleted = No AND Noview = No AND status in ('I','R', 'A'))
Order by status, opslogid DESC;

これの出力は次のとおりです。

opslogid                               status

9980                                       A

9979                                       A

9978                                       A

9998                                       I

9997                                       I

9994                                       O

9991                                       O

9999                                       P

9996                                       P

9930                                       R

9928                                       R

私もこのコードを試しました:

SELECT *
FROM tblOpsLog
WHERE Deleted = No AND Noview = No AND status IN ('A', 'I', 'R', 'O', 'P')
ORDER BY CASE WHEN status IN ('O', 'P') then 1
              ELSE 2
         END, opslogid DESC

これは私にこのエラーを与えました:

Syntax error (missing oeprator) in query expression 'CASE WHEN status IN ('O','P') then 1 ELSE 2 End'.

目的の出力を表示するためにコードに何を修正/追加するかを誰かが提案できれば、本当に感謝していますか? ありがとうございました

4

2 に答える 2

0

これを試して:

SELECT * FROM tblOpsLog WHERE Deleted = No AND Noview = No 
AND status IN ('A', 'I', 'R', 'O', 'P')
ORDER BY CASE status WHEN 'P' then 1
WHEN 'O' then 1
ELSE 2
END, opslogid DESC
于 2013-05-23T13:15:13.600 に答える