3

SQLServer2012にテーブルMessagesがあります。テーブルにありますthree columns

ID which is an identity column, 
MessageID (int) which is a foreign key to other table and 
IsRead field which is a bit not null column.

特定の時点で、テーブルにはIsRead列値を持つ膨大な数のレコードを含めることができます1 or 0。既読メッセージと未読メッセージの数を2つの別々の列に表示する単一のクエリを作成したいと思います。SQLServer2012で導入された新しいウィンドウ関数を効率的に使用しようとしています。どうすればいいですか?

4

4 に答える 4

4

これが役立つかどうかを確認してください。

SELECT 
    IsRead, 
    COUNT(*) ReadCount 
FROM 
    YourTable 
GROUP BY IsRead

または、次のように2つの列で選択できます。

SELECT  SUM(IsRead - 0) AS ReadCount,
        SUM(1 - IsRead) AS UnreadCount
FROM    YourTable
于 2013-02-01T09:36:02.973 に答える
2
SELECT  COUNT(CASE WHEN isRead = 1 THEN 1 END) AS read,
        COUNT(CASE WHEN isRead = 0 THEN 1 END) AS unread
FROM    mytable
于 2013-02-01T09:38:03.643 に答える
1

@Quassnoiが言及したクエリは単純です............。

ここにもう1つの方法がありますあなたはあなたの解決策を得ることができます

SELECT (SELECT COUNT(isRead) FROM [mytable] WHERE isRead = 1) AS READDATA,
(SELECT COUNT(isRead) FROM [mytable] WHERE isRead = 0) AS UNREADDATA
于 2013-02-01T09:51:23.453 に答える
-1

メッセージグループbyIsReadからIsRead、count(*)を選択しますが、出力は2行になります。

于 2013-02-01T09:35:42.540 に答える