如何设置局部变量值等于 CTE table 的结果?
How to SET the local variable value equal to result from CTE table?
我有一个问题
我们有这样的 table HR
EmpName Empmanager
Jack Jane
Tom Jane
Tony Victor
Isabella Hugo
Anna Victor
所以我想逐行提取 DISTINCT emp.manager 然后 select 并将它们提供给变量假设 mgrname。我在 SET @mgrname 语法中遇到错误?
DECLARE @count INT
DECLARE @mgrname VARCHAR(20)
SET @count = 3
WITH MGRlist as(
SELECT DISTINCT Empmanager FROM HR)
**SET @mgrname** = SELECT Empmanager FROM (
SELECT ROW_NUMBER() OVER (ORDER BY mgr ASC) AS RowNumber,
*
FROM MGRlist
) AS RESULT
WHERE RowNumber = @count -- FIND THE CURRENT MANAGER NAME
select 'Jack' as Empname , 'Jane' as empmanager
into #temp1 union all
select 'Tom' as Empname , 'Jane' as empmanager union all
select 'Tony' as Empname , 'Victor' as empmanager union all
select 'Isabella' as Empname , 'Hugo' as empmanager union all
select 'Anna' as Empname , 'Victor' as empmanager
DECLARE @count INT
DECLARE @mgrname VARCHAR(20)
SET @count = 3
SELECT DISTINCT Empmanager into #temp2 FROM #temp1
set @mgrname = (SELECT Empmanager FROM (
SELECT ROW_NUMBER() OVER (ORDER BY empmanager ASC) AS RowNumber,
*
FROM #temp2
) AS RESULT
WHERE RowNumber = @count) -- FIND THE CURRENT MANAGER NAME
select @mgrname as CurrentManagername
输出:
CurrentManagername
Victor
您可以创建一个临时 table 并使用它来引用,直到会话处于活动状态。
DECLARE @count INT
DECLARE @mgrname VARCHAR(20)
SET @count = 3
;WITH MGRlist as(
SELECT DISTINCT Empmanager FROM HR)
SELECT @mgrname= Empmanager FROM (
SELECT ROW_NUMBER() OVER (ORDER BY Empmanager ASC) AS RowNumber,
*
FROM MGRlist
) AS RESULT
WHERE RowNumber = @count
如果您想在这种情况下获得不同的经理姓名,则不需要 CTE
。
您正在尝试在 VARCHAR
数据类型
中插入多个值
DECLARE @mgrname VARCHAR(20)
您应该创建一个 TABLE
类型的变量,而不是创建一个 VARCHAR
变量,它可以包含多个值,如下所示。
DECLARE @mgrname TABLE(ManagerName VARCHAR(100))
要获取特定数量的不同经理姓名,您可以使用
SELECT DISTINCT TOP (@count)
您的最终查询应如下所示。
DECLARE @count INT
DECLARE @mgrname table (ManagerName VARCHAR(100))
SET @count = 3
INSERT INTO @mgrname
SELECT DISTINCT TOP (@count) Empmanager FROM HR
ORDER BY Empmanager
--Now output is stored inside a table variable.
SELECT * FROM @mgrname
我有一个问题 我们有这样的 table HR
EmpName Empmanager
Jack Jane
Tom Jane
Tony Victor
Isabella Hugo
Anna Victor
所以我想逐行提取 DISTINCT emp.manager 然后 select 并将它们提供给变量假设 mgrname。我在 SET @mgrname 语法中遇到错误?
DECLARE @count INT
DECLARE @mgrname VARCHAR(20)
SET @count = 3
WITH MGRlist as(
SELECT DISTINCT Empmanager FROM HR)
**SET @mgrname** = SELECT Empmanager FROM (
SELECT ROW_NUMBER() OVER (ORDER BY mgr ASC) AS RowNumber,
*
FROM MGRlist
) AS RESULT
WHERE RowNumber = @count -- FIND THE CURRENT MANAGER NAME
select 'Jack' as Empname , 'Jane' as empmanager
into #temp1 union all
select 'Tom' as Empname , 'Jane' as empmanager union all
select 'Tony' as Empname , 'Victor' as empmanager union all
select 'Isabella' as Empname , 'Hugo' as empmanager union all
select 'Anna' as Empname , 'Victor' as empmanager
DECLARE @count INT
DECLARE @mgrname VARCHAR(20)
SET @count = 3
SELECT DISTINCT Empmanager into #temp2 FROM #temp1
set @mgrname = (SELECT Empmanager FROM (
SELECT ROW_NUMBER() OVER (ORDER BY empmanager ASC) AS RowNumber,
*
FROM #temp2
) AS RESULT
WHERE RowNumber = @count) -- FIND THE CURRENT MANAGER NAME
select @mgrname as CurrentManagername
输出:
CurrentManagername
Victor
您可以创建一个临时 table 并使用它来引用,直到会话处于活动状态。
DECLARE @count INT
DECLARE @mgrname VARCHAR(20)
SET @count = 3
;WITH MGRlist as(
SELECT DISTINCT Empmanager FROM HR)
SELECT @mgrname= Empmanager FROM (
SELECT ROW_NUMBER() OVER (ORDER BY Empmanager ASC) AS RowNumber,
*
FROM MGRlist
) AS RESULT
WHERE RowNumber = @count
如果您想在这种情况下获得不同的经理姓名,则不需要 CTE
。
您正在尝试在 VARCHAR
数据类型
DECLARE @mgrname VARCHAR(20)
您应该创建一个 TABLE
类型的变量,而不是创建一个 VARCHAR
变量,它可以包含多个值,如下所示。
DECLARE @mgrname TABLE(ManagerName VARCHAR(100))
要获取特定数量的不同经理姓名,您可以使用
SELECT DISTINCT TOP (@count)
您的最终查询应如下所示。
DECLARE @count INT
DECLARE @mgrname table (ManagerName VARCHAR(100))
SET @count = 3
INSERT INTO @mgrname
SELECT DISTINCT TOP (@count) Empmanager FROM HR
ORDER BY Empmanager
--Now output is stored inside a table variable.
SELECT * FROM @mgrname