を使用すると、ここでこれを行う方法です明確なを行うことをお勧めします。
まずテストテーブルを作成し、いくつかの値を挿入します。
CREATE TABLE dbo.T
(
[counter] int not null,
[type] nvarchar(250) not null,
[name] nvarchar(50) not null
);
INSERT INTO dbo.T ([counter], [type], [name])
VALUES (1, N'Alpha', N'Bassem Akl'),
(2, N'Alpha', N'aaaaa'),
(3, N'Alpha', N'Akl Bassem'),
(4, N'Bravo', N'bbbbb'),
(5, N'Bravo', N'A Bassem'),
(6, N'Charlie', N'ccccc'),
(7, N'Charlie', N'ddddd');
はその後名前が検索しているテキストが含まれているかどうかを判断するためにCTE(共通テーブル式)を使用します。ここでCTEを使用する必要はありませんが、全体的なSELECTステートメントを理解しやすくなります。 Transact-SQLのは、Booleanデータ型を持っていないことを
WITH cte AS
(
SELECT [counter], [type], IIF([name] LIKE N'%Bassem%', 1, 0) AS 'contains'
FROM dbo.T
)
SELECT SUM([counter]) AS 'SumCounter', [type], CAST(MAX([contains]) AS bit) as 'contains'
FROM cte
GROUP BY [type];
注意。代わりにビットタイプがあります。書籍のオンライン> bit(Transact-SQL) - https://msdn.microsoft.com/en-gb/library/ms177603.aspx
説明のためにありがとう –
私はcteを使ってパフォーマンスが低下すると思ったが、それは2番目の選択肢があったが、 –
うれしかった!私はCTEが大好きです.SQL文をもっとはっきりさせるためです。グラフィカルな実行計画を見て、クエリオプティマイザがCTEを別のステートメントとして扱っていないことを確認する必要があります。 – RichardCL