Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Case语句T-SQL_Sql Server_Tsql_Case - Fatal编程技术网

Sql server Case语句T-SQL

Sql server Case语句T-SQL,sql-server,tsql,case,Sql Server,Tsql,Case,在我尝试添加带有SELECT子句的Case语句之前,下面的脚本一切正常。我这样做是为了用正确的日期自动填充表。有人能告诉我我做错了什么吗 DECLARE @PitchType_Skey INT DECLARE @Site_Skey INT DECLARE @Capacity INT DECLARE @StartDate DATE DECLARE @EndDate DATE SET @PitchType_Skey = 1 SET @Site_Skey = 1 SET @Capacity = 0

在我尝试添加带有SELECT子句的Case语句之前,下面的脚本一切正常。我这样做是为了用正确的日期自动填充表。有人能告诉我我做错了什么吗

DECLARE @PitchType_Skey INT
DECLARE @Site_Skey INT
DECLARE @Capacity INT
DECLARE @StartDate DATE
DECLARE @EndDate DATE

SET @PitchType_Skey = 1
SET @Site_Skey = 1
SET @Capacity = 0

WHILE (@Site_Skey < 127)

BEGIN
    IF @PitchType_Skey = 8

BEGIN

SET @PitchType_Skey = 1
SET @Site_Skey = @Site_Skey + 1

END

IF (@Site_Skey < 127)

BEGIN

Set @Capacity = (SELECT SiteWeighting From Site Where Site_Skey = @Site_Skey)
Set @Capacity = @Capacity * (SELECT PitchTypeWeighting From PitchType  Where PitchType_Skey = @PitchType_Skey)
Set @Capacity = @Capacity * ((10*(100+((RAND()*40)-20)))*0.01)

     INSERT INTO Capacity 
     SELECT
     CASE @StartDate
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 1 THEN 01/05/2010) ELSE,
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 2 THEN 01/04/2010) ELSE,
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 3 THEN 01/04/2010) ELSE,
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 4 THEN 01/01/2010) ELSE,

     CASE @EndDate
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 1 THEN 30/09/2010) ELSE,
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 2 THEN 01/11/2010) ELSE,
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 3 THEN 01/11/2010) ELSE,
     WHEN (SELECT SiteWeighting FROM Site WHERE SiteWeighting = 4 THEN 01/12/2010) ELSE,

      round(@Capacity,0) as Capacity,
      @PitchType_Skey, @Site_Skey

END
  SET @PitchType_Skey = @PitchType_Skey + 1

END

你把括号放错地方了。然后是case语句的一部分,但它位于子查询中。您也只希望每个案例语句有一个

如果不了解更多关于表的信息,很难知道是否有更多错误,但是语法正确的case语句如下所示:

CASE @StartDate
  WHEN (SELECT SiteWeighting FROM Site WHERE Site_SKey=@Site_SKey)=1 THEN '01/05/2010'
  WHEN (SELECT SiteWeighting FROM Site WHERE Site_SKey=@Site_SKey)=2 THEN '01/04/2010'
  ELSE NULL 
END

但是,我强烈建议您不要使用案例陈述。取而代之的是,使用其他工具,比如一个带有开始和结束日期的查找表,您可以根据站点权重加入该表。这会让你的生活变得更轻松。

嗨,丹,我正在学习,我被告知使用案例陈述,因此如果我将括号移到=1的末尾,这能解决问题吗?@wafw1971,请参阅更新以获取案例陈述的示例。不过,您可能需要更新您的问题,提供更多关于表结构和您正在尝试执行的操作的信息。我不确定到底需要什么。我有一个站点表,它有一个站点权重列,每个站点的权重在1到4之间,我目前正在处理容量表,希望使用站点表中的权重来确定开始和结束日期。我尝试了您的更改,但仍然无法将其上载到容量表。@wafw1971,我想我明白你在做什么了。尝试更新的版本。关键是要确保从站点表中获取与当前站点匹配的记录。注意:在SQL中,IF是语句,而CASE是表达式/函数。