我有下表有两个字段,即a和b,如下所示:
create table employe
(
empID varchar(10),
department varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
插入一些记录:
insert into employe values('A101','Z'),('A101','X'),('A101','Y'),('A102','Z'),('A102','X'),
('A103','Z'),('A103','Y'),('A104','X'),('A104','Y'),('A105','Z'),('A106','X');
select * from employe;
Run Code Online (Sandbox Code Playgroud)
empID department
------------------
A101 Z
A101 X
A101 Y
A102 Z
A102 X
A103 Z
A103 Y
A104 X
A104 Y
A105 Z
A106 X
Run Code Online (Sandbox Code Playgroud)
注意:现在我想显示仅属于该部门Z且仅属于该部门的员工Y.因此,根据条件,A103应该显示唯一的员工,因为他只属于部门Z和Y.但员工A101不应该出现,因为他属于Z,X, and Y.
预期成果:
如果条件是:Z和Y则结果应该是:
empID
------
A103
Run Code Online (Sandbox Code Playgroud)
如果条件是:Z和X则结果应该是:
empID
------ …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照我的要求创建一个函数.
但是,当我创建或删除时#tempTable,它会给出一个错误:
在函数内无效使用副作用运算符'drop object'
我的理解是,我们不能有create,drop或insert在操作#temptable中的功能.
那是对的吗?
我的SQL:
CREATE FUNCTION [dbo].[RT_ResultFunction]
(
Id VARCHAR(4000)
)
RETURNS @RT_ResultFunction TABLE
(
Id VARCHAR(20)
, Name varchar(20)
,Balance Int
)
AS
BEGIN
IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL
DROP TABLE #tempTable
SELECT Id, COUNT(Balance)
INTO #tempTable
'Balance' FROM Table1
INSERT @RT_ResultFunction
SELECT T1.ID,T1,NAME,T2,Balance
FROM Table2 T1,
#tempTable T2
WHERE T1.ID = T2.ID
RETURN
END
Run Code Online (Sandbox Code Playgroud) 我使用*符号获得了阶乘值:
declare @given_number int=5;
declare @fact int=1;
while(@given_number > 1)
begin
set @fact = @fact * @given_number;
set @given_number = @given_number - 1;
end
select @fact as 'Factorial is '
Run Code Online (Sandbox Code Playgroud)
但是现在我希望在不使用*符号的情况下获得相同的阶乘值
提供正确的查询,请帮助我吗?