使用 COUNT 的 sql set 变量

sql set variable using COUNT

提问人:Lumpi 提问时间:5/22/2011 最后编辑:jaoLumpi 更新时间:4/20/2021 访问量:208319

问:

我正在尝试对我的服务器进行一个简单的查询,并希望将结果存储在变量 @times 中。

DECLARE @times int

SET @times = SELECT COUNT(DidWin)as "I Win"
FROM thetable
WHERE DidWin = 1 AND Playername='Me'

IntelliSense 说Wrong syntax near Select

sql-server t-sql

评论


答:

13赞 lambacck 5/22/2011 #1

您可以直接选择变量,而不是使用 set:

DECLARE @times int

SELECT @times = COUNT(DidWin)
FROM thetable
WHERE DidWin = 1 AND Playername='Me'

如果你需要设置多个变量,你可以从同一个选择中完成(示例有点做作):

DECLARE @wins int, @losses int

SELECT @wins = SUM(DidWin), @losses = SUM(DidLose)
FROM thetable
WHERE Playername='Me'

如果您偏爱使用 set,则可以使用括号:

DECLARE @wins int, @losses int

SET (@wins, @losses) = (SELECT SUM(DidWin), SUM(DidLose)
FROM thetable
WHERE Playername='Me');

评论

0赞 ypercubeᵀᴹ 5/22/2011
您可以,但不需要直接在变量中选择。
1赞 lambacck 5/22/2011
@ypercube:但是如果你养成了使用 select 的习惯,当 1 select 可以同时设置所有变量时,你就不会尝试使用 2 个或更多 set + select 命令。我还发现 SELECT 更具可读性。
0赞 ypercubeᵀᴹ 5/22/2011
我不同意可读性,但这是个人品味。对我来说可读的是SET (@var1, @var2, ..., @varn) = (SELECT ... )
0赞 lambacck 5/22/2011
我喜欢赋值接近变量名称。如果有许多赋值,则可能更难选择选择中的哪个项目适用于哪个变量。更不用说你最终会有更多的代码。
2赞 James Wiseman 5/22/2011 #2

你想要:

DECLARE @times int

SELECT @times =  COUNT(DidWin)
FROM thetable
WHERE DidWin = 1 AND Playername='Me'

您也不需要“as”子句。

130赞 Mike Valenty 5/22/2011 #3

您只需要在选择的周围加上括号:

SET @times = (SELECT COUNT(DidWin) FROM ...)

或者你可以这样做:

SELECT @times = COUNT(DidWin) FROM ...
0赞 a1ex07 5/22/2011 #4

你可以像 lambacck 所说的那样使用 或添加括号:SELECT

SET @times = (SELECT COUNT(DidWin)as "I Win"
FROM thetable
WHERE DidWin = 1 AND Playername='Me');
-2赞 Vasil Valchev 4/19/2021 #5

如果需要打印列名为“c”的结果,或使用列名“c”在代码中读取结果:

DECLARE @c int;
SELECT c = count(*) from '%Table%' WHERE '%condition%'

评论

1赞 Wes H 4/19/2021
这不会将结果分配给变量。相反,它将返回一个结果集,其中包含一个名为 c 的列。变量 @c 将为 null。而且您不能在单个语句中分配和返回。