這裏有一個辦法做到這一點。
首先創建一個測試表,並插入一些值:
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語句更易於理解。
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];
![enter image description here](https://i.stack.imgur.com/RJ9bp.png)
注意的Transact-SQL不具有布爾數據類型;相反它有點類型。請參見聯機叢書>位(Transact-SQL) - https://msdn.microsoft.com/en-gb/library/ms177603.aspx
非常感謝您的解釋 –
我認爲使用cte會降低性能,因爲第二次選擇但奇怪的發生其他原因我不知道爲什麼! –
很高興幫助! :-)我非常喜歡CTE,因爲它們使SQL語句更清晰。查看圖形執行計劃,您應該看到「查詢優化器」並未將CTE視爲單獨的語句。 – RichardCL