【发布时间】:2015-02-03 17:50:05
【问题描述】:
所以,我有一些数据表,我需要根据旧数据获取一个包含新数据的新表,然后将它们插入到临时表中以进行下一次处理。
但是我的 SQL 出了点问题
DECLARE @PGNPGE float,
@PGHTTP400PCT float,
@PGHTTP500PCT float,
@PGSLPCT float,
@PGTME float;
DECLARE @tempTable TABLE (
PViews int,
Http400 int,
Http500 int,
PTime int,
ExclSimul int,
DispSimul int,
SlowPages int,
AESWA int
);
IF EXISTS (SELECT COUNT(*) FROM [ApplicationThreshold] WHERE [ApplicationID] = @AppID)
BEGIN
SELECT @PGNPGE = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 6;
SELECT @PGHTTP400PCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 31;
SELECT @PGHTTP500PCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 12;
SELECT @PGSLPCT = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 49;
SELECT @PGTME = Value FROM [ApplicationThreshold] WHERE [ThresholdID] = 72;
END
ELSE
BEGIN
SELECT @PGNPGE = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 6;
SELECT @PGHTTP400PCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 31;
SELECT @PGHTTP500PCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 12;
SELECT @PGSLPCT = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 49;
SELECT @PGTME = Value FROM [ApplicationTypeThreshold] WHERE [ThresholdID] = 72;
END
INSERT INTO @tempTable (
PViews,
Http400,
Http500,
PTime,
ExclSimul,
DispSimul,
SlowPages,
AESWA )
SELECT
[PViews] = CASE WHEN sel.[PGNPGE] < @PGNPGE THEN 1 ELSE 0 END,
[Http400] = CASE WHEN sel.[PGHTTP400PCT] > @PGHTTP400PCT THEN 1 ELSE 0 END,
[Http500] = CASE WHEN sel.[PGHTTP500PCT] > @PGHTTP500PCT THEN 1 ELSE 0 END,
[PTime] = CASE WHEN sel.[PGTME] > @PGTME THEN 1 ELSE 0 END,
[ExclSimul] = CASE WHEN ([PViews] + [Http400] + [Http500] + [PTime]) >= 1 THEN 1 ELSE 0 END,
[DispSimul] = CASE WHEN ([PViews] + [Http400] + [Http500] + [PTime]) > 1 THEN ([PViews] + [Http400] + [Http500] + [PTime]) ELSE 0 END,
[SlowPages] = CASE WHEN sel.[PGSLPCT] > @PGSLPCT THEN 1 ELSE 0 END,
[AESWA] = CASE WHEN [ExclSimul] >=1 THEN 0 ELSE [SlowPages] END
FROM (SELECT [PGNPGE], [PGHTTP400PCT], [PGHTTP500PCT], [PGSLPCT], [PGTME]
FROM [dbo].[TimeValue]
WHERE [ApplicationID] = @AppID
AND [Time] BETWEEN @DateFrom AND @DateTo) sel;
SELECT * FROM @tempTable;
以及我添加新值的错误
消息 207,第 16 层,状态 1,第 59 行
列名“PViews”无效。消息 207,第 16 层,状态 1,第 59 行
列名“Http400”无效。消息 207,第 16 层,状态 1,第 59 行
列名“Http500”无效。消息 207,第 16 层,状态 1,第 59 行
列名“PTime”无效。消息 207,第 16 层,状态 1,第 60 行
列名“PViews”无效。消息 207,第 16 层,状态 1,第 60 行
列名“Http400”无效。消息 207,第 16 层,状态 1,第 60 行
列名“Http500”无效。消息 207,第 16 层,状态 1,第 60 行
列名“PTime”无效。消息 207,第 16 层,状态 1,第 60 行
列名“PViews”无效。消息 207,第 16 层,状态 1,第 60 行
列名“Http400”无效。消息 207,第 16 层,状态 1,第 60 行
列名“Http500”无效。消息 207,第 16 层,状态 1,第 60 行
列名“PTime”无效。消息 207,第 16 层,状态 1,第 62 行
列名“ExclSimul”无效。消息 207,第 16 层,状态 1,第 62 行
列名“SlowPages”无效。
【问题讨论】:
-
您不能在定义表的同一
select中引用表别名。如果您愿意,可以使用子查询,或者只是重复表达式。 -
我认为有可能以某种方式绕过
-
是的。这只是分配别名的另一种方式。
标签: sql sql-server sql-server-2008 tsql