Sql server T-SQL计算列上的If-Else语句

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语句填充一个计算列,我不知道如何为它编写t-SQL,我已经寻找了答案,但找不到

我要找的基本上是

IF (Close<=Open)
   [CloseLessEqualToOpen == Yes]
ELSE
   [CloseLessEqualToOpen == No]

首先,您需要在语句中使用一个值:

DECLARE@Close DECIMAL(18,2);
设置@Close=(从[dbo].[LowFloatStocks]中选择前1个收盘价);
对于上述语句,您还可以根据需要应用
WHERE
或任何其他条款

然后使用SQL进行比较,方法如下:


IF(@Close
IF
是逻辑流运算符,而不是函数/表达式。您需要使用
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)