私の理解から、あなたは、私がこれまで簡素化するでしょうその中のステータス値とメインテーブルを持っている:
CREATE TABLE #MainTable
(
id INT,
[status] NVARCHAR(1)
)
あなた問題は、Others
のステータスがO
の行がない場合、カウントを取得するために行をグループ化するときに0
が取得されないことです。
にリンクするStatus
テーブルを作成することをおすすめします。これにより、CASE
ステートメントの必要性もなくなります。
完全なソリューション:
CREATE TABLE #MainTable
(
id INT ,
[status] NVARCHAR(1)
);
INSERT INTO #MainTable
(id, [status])
VALUES (1, 'I'),
(2, 'I'),
(3, 'I'),
(4, 'I'),
(5, 'C'),
(6, 'C');
CREATE TABLE #status
(
[status] NVARCHAR(1) ,
[statusText] NVARCHAR(15)
);
INSERT INTO #status
(status, statusText)
VALUES ('I', 'In Progress'),
('C', 'Completed'),
('O', 'Others');
SELECT s.statusText ,
COUNT(t.[status]) StatusCount
FROM #MainTable t
RIGHT JOIN #status s ON s.status = t.status
GROUP BY s.statusText;
DROP TABLE #MainTable;
DROP TABLE #status;
を生成します:それは私はあなたがID
値で置き換えることを示唆しているI,O,C
文字列値、に参加する上記の例では
statusText StatusCount
Completed 2
In Progress 4
Others 0
。
CREATE TABLE #MainTable
(
id INT ,
statusId INT
);
CREATE TABLE #status
(
statusId INT ,
statusShort NVARCHAR(1) ,
statusText NVARCHAR(15)
);
SELECT t.id ,
t.statusId ,
s.statusId ,
s.statusShort ,
s.statusText
FROM #MainTable t
RIGHT JOIN #status s ON s.statusId = t.statusId
DROP TABLE #MainTable;
DROP TABLE #status;
2行を取得しているということは、あなたが私たちに表示していない「GROUP BY」を持っているということですか? –
集計があるので、そこにグループが存在する必要があります。クエリ全体を共有できますか? –
はい私はGROUP BYステータスを使用しました – kselva