件数のあるメッセージの一覧を含むテーブルがあります。 0は、すべてのメッセージが読み取られることを意味し、Count> 0は、n個の未読メッセージがあることを意味します。私は、読み込みレコード、未読レコード、または両方のステータスタイプ( '読み取り'、 '未読'、 '両方')のレコードを取得したいと思います。私もこのSQLクエリを試してみましたSQL Server 2008 R2のwhere句での比較演算子の使用
DECLARE @Status VARCHAR(10)
SET @Status = 'ALL'
SELECT *
FROM Messages
WHERE
(UPPER(@Status) = 'READ' AND UNREAD = 0)
OR (UPPER(@Status) = 'UNREAD' AND UNREAD > 0)
OR (UNREAD >=0)
)
:私は次のSQLクエリを使用しています
DECLARE @Status VARCHAR(10)
SET @Status = 'ALL'
SELECT *
FROM Messages
WHERE 1 = (
CASE WHEN UPPER(@Status) = 'READ' AND UNREAD = 0 THEN 1
WHEN UPPER(@Status) = 'UNREAD' AND UNREAD > 0 THEN 1
WHEN UPPER(@Status) = 'ALL' AND UNREAD >= 0 THEN 1
ELSE 0
END
)
しかしたびに、返された結果セットには、カウント> 0何があるレコードのみが含まれています私は間違っている?
テーブルの構造は次のようである:
ChatGroupId Unread
---------------------------
1 0 --When all messages are read
2 50 --When some of the messages are unread
出力は次のようになります。
@status = 'READ'
ChatGroupId Unread
---------------------------
1 0 --When all messages are read
@status = 'UNREAD'
ChatGroupId Unread
---------------------------
2 50 --When some of the messages are unread
場合は@status = 'ALL'
ChatGroupId Unread
---------------------------
1 0 --When all messages are read
2 50 --When some of the messages are unread
を試す(および/または下さいSQLのフィドル) - 私はあなたがこれをかなり複雑にしている疑いがありますが、追加情報なしで確かめるのは難しいです。 –
が更新されました。確認してください –