Sql 无法将运行的查询另存为视图
SQL Server 2008 我有一个带有几个局部变量的查询,它在结果集中做了一些简单的数学运算。当我复制并粘贴查询以尝试将其保存为视图时,它无法告诉我存在不正确的语法。(在本例中,它靠近变量的declare语句。)如果需要,我将发布查询,只是想知道这是否是一种工作方式而不是另一种方式的原因Sql 无法将运行的查询另存为视图,sql,Sql,SQL Server 2008 我有一个带有几个局部变量的查询,它在结果集中做了一些简单的数学运算。当我复制并粘贴查询以尝试将其保存为视图时,它无法告诉我存在不正确的语法。(在本例中,它靠近变量的declare语句。)如果需要,我将发布查询,只是想知道这是否是一种工作方式而不是另一种方式的原因 declare @totalpop float, @totalMales float, @totalFemales float, @percentMales float, @percentFemales
declare @totalpop float,
@totalMales float,
@totalFemales float,
@percentMales float,
@percentFemales float;
select @totalmales=sum(case when sex='m' then 1 else 0 end),
@totalfemales = sum(case when sex='f' then 1 else 0 end),
@totalpop=count(*)
from tblVisits
select @percentmales = round(100 * @totalmales/@totalpop,2),
@percentFemales = round(100*@totalfemales/@totalpop,2)
select @totalmales,@percentmales,@totalfemales, @percentfemales, @totalpop
您不需要任何已声明的变量,可以在带有嵌套select的纯旧sql中执行此操作:
SELECT totalmales, round(1e2*totalmales/totalpop, 2) percentmales,
totalfemales, round(1e2*totalfemales/totalpop, 2) percentfemales,
totalpop
FROM (SELECT sum(case when sex='m' then 1 else 0 end) totalmales,
sum(case when sex='f' then 1 else 0 end) totalfemales,
count(*) totalpop
FROM tblVisits) innerquery
在大多数支持视图和子选择(基本上是所有视图和子选择)的数据库上都应该可用。您不能在视图中使用变量。但是,您可以在SP(存储过程)或基于表的函数中对其进行转换
编辑:或者按照MacGuy告诉您的操作:p.您正在使用SQL Server 2008,因此另一种方法是使用PIVOT:
create view V as
select
m as totalmales,
round(1e2*m/(m+f),2) as pctmales,
f as totalfemales,
round(1e2*f/(m+f),2) as pctfemales,
m+f as totalpop
from tblVisits as T
pivot (count(sex) for sex in ([m],[f])) as P;
如果执行此操作,请确保在round()表达式中保留1e2或使用100.0而不是100。否则,分区m/(m+f)和f/(m+f)将是整数除法,两者都为零。请提供有关您的问题的更多信息。您可以复制粘贴您正在使用的查询吗?另外:这是用于哪个DBMS?在快速搜索时,我发现了以下帖子:。一位回答者说您不能在视图中使用变量,但建议查看表值函数。另一个搜索是n MSDN提出了以下问题:为了澄清……在视图的定义中不能使用局部变量。也许您需要的是一个返回行的存储过程。尽管有很多UPVOUT,但此答案的原始版本将为两个百分比生成0(如果每个人都是同性,则为0和1),因为它在外部查询中进行整数除法。我正在更正它以使其正常工作。