Sql server T-SQL计算列上的If-Else语句
我有一个我正在为我正在制作的应用程序创建的表,我想从IF语句填充一个计算列,我不知道如何为它编写t-SQL,我已经寻找了答案,但找不到 我要找的基本上是Sql server T-SQL计算列上的If-Else语句,sql-server,database,visual-studio,tsql,Sql Server,Database,Visual Studio,Tsql,我有一个我正在为我正在制作的应用程序创建的表,我想从IF语句填充一个计算列,我不知道如何为它编写t-SQL,我已经寻找了答案,但找不到 我要找的基本上是 IF (Close<=Open) [CloseLessEqualToOpen == Yes] ELSE [CloseLessEqualToOpen == No] 首先,您需要在语句中使用一个值: DECLARE@Close DECIMAL(18,2); 设置@Close=(从[dbo].[LowFloatStocks]中选择
IF (Close<=Open)
[CloseLessEqualToOpen == Yes]
ELSE
[CloseLessEqualToOpen == No]
首先,您需要在语句中使用一个值:
DECLARE@Close DECIMAL(18,2);
设置@Close=(从[dbo].[LowFloatStocks]中选择前1个收盘价);
对于上述语句,您还可以根据需要应用WHERE
或任何其他条款
然后使用SQL进行比较,方法如下:
IF(@CloseIF
是逻辑流运算符,而不是函数/表达式。您需要使用CASE
表达式或IIF
为什么要存储为计算列?下面是一个[很好的示例][1]说明您试图实现的目标。[1]:反对使用它的理由是什么@Daniel A.White?@F.OLeary这是一个质疑的问题,不促进规范化这正是我想要的,谢谢,我称之为计算过的专栏,如果其他人误解了[CloseSequalOpen]演员阵容,向他们道歉(CASE WHEN[Close]@F.OLeary抱歉,我忘了在这里添加结尾语法。刚刚编辑了这篇文章,现在应该没有语法错误了。非常感谢先生
CREATE TABLE [dbo].[LowFloatStocks] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Date] DATE NOT NULL,
[Ticker] NCHAR (10) NOT NULL,
[PreviousClose] DECIMAL (4, 2) DEFAULT ((4.00)) NOT NULL,
[OpeningPrice] DECIMAL (18, 2) NOT NULL,
[GainPercent] AS (round(([High]-[OpeningPrice])/[OpeningPrice],(4))*(100.0)) PERSISTED NOT NULL,
[GapPercent] AS (round(([OpeningPrice]-[PreviousClose])/[PreviousClose],(4))*(100.0)) PERSISTED NOT NULL,
[Spike] DECIMAL (18, 2) NOT NULL,
[1stSpike%] AS (round(([Spike]-[OpeningPrice])/[OpeningPrice],(4))*(100.0)) PERSISTED NOT NULL,
[High] DECIMAL (18, 2) NOT NULL,
[HighPercent] AS (round(([High]-[PreviousClose])/[PreviousClose],(4))*(100.0)) PERSISTED NOT NULL,
[Low] DECIMAL (18, 2) NOT NULL,
[LowPercent] AS (round(([Low]-[PreviousClose])/[PreviousClose],(4))*(100.0)) PERSISTED NOT NULL,
[Close] DECIMAL (18, 2) DEFAULT ((4)) NOT NULL,
[ClosePercent] AS (round(([Close]-[PreviousClose])/[PreviousClose],(4))*(100.0)) PERSISTED NOT NULL,
[CloseLessEqualToOpen] NCHAR (3) NULL,
[CloseRed] NCHAR (3) NULL,
[ClosevHigh] AS (round(([High]-[Close])/[Close],(4))*(100)) PERSISTED NOT NULL,
[ClosevOpen] AS (round(([OpeningPrice]-[Close])/[OpeningPrice],(4))*(100.0)) PERSISTED NOT NULL,
[Catalyst] NVARCHAR (50) NOT NULL,
[Float] DECIMAL (18, 3) NOT NULL,
[Dilution] NCHAR (3) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)