我有這個表Test
在SQL Server中的列Name
:SQL服務器:組與條件及給予的功能
Name
-----
a
a
a
c
c
b
我寫此查詢:
select *
from (select Name, COUNT(*) as cnt
from Test
group by Name
having COUNT(*) > 2) as newTbl
where dbo.fn_Test(Name) = 1
凡dbo.fn_Test
一個SQL服務器標量函數:
CREATE FUNCTION [dbo].[fn_Test]
(@name nvarchar)
RETURNS bigint
AS
BEGIN
DECLARE @count int
SET @count = (SELECT TOP 1 COUNT(*)
FROM Tbl
WHERE Name = @name);
return @count;
END
從第一個查詢FROM
部分是平原,這個選擇得到:
select Name, COUNT(*) as cnt
from Test
group by Name
having COUNT(*) > 2
輸出:
Name cnt
--------
a 3
但調試查詢時,輸入到dbo.fn_Test
功能,它爲所有名稱工作:
a b c
所以如何創建選擇以獲得名稱「a」的功能?
「Tbl」表的結構是什麼?它應該是測試而不是功能中的Tbl?還有一個問題:我理解每個語句或SQL對象的作用,但是你想獲得什麼,「一般」在談論上述工作時? – 2014-11-22 14:29:38
Tbl任何表。當我調試我的腳本並通過邏輯輸入函數部分時,我只提供名字'a',但我得到其他名稱。爲什麼?功能內容並不重要。 – 2014-11-22 15:07:41
你可以像更新「dbo.fn_Test(newTbl.Name)= 1」那樣更新where子句並重試嗎? (注意在列名前面加入內聯視圖別名前綴)。 – 2014-11-22 15:28:15