首页 > 解决方案 > 基于另一个值 SQL Server 的计算字段

问题描述

我在 Azure SQL 服务器中有一个表,其中有一个值和一个日期。

CREATE TABLE [dbo].[example] (
  [Value] varchar(50) NULL,
  [Date] date NULL
)

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'A', N'2020-04-01')
GO

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'A', N'2020-04-01')
GO

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'B', N'2020-04-03')
GO

INSERT INTO [dbo].[example] ([Value], [Date]) VALUES (N'C', N'2020-04-03')
GO

我对 MySQL 的经验有限,并且对更改后的语句有困难。在这个数据库中,我需要根据该值计算一个新日期。

我知道如何使用以下语句进行 Dateadd。

SELECT
    example.[Value],
    example.[Date], 
    DATEADD(day, 10, example.[Date]) AS NewDate
FROM
    dbo.example

但它会将日期添加到所有人。我已经阅读了 if else 语句,但这就是我无法得到结果的地方。

我需要的是,如果值在(B,C)中,它应该只添加 10 天,否则在当前日期字段中添加 20 天。如何将 If 语句设置为适用于每一行,因为如果我使用其背后的逻辑,它会返回多个结果并且它将无法工作

标签: sql-serverif-statementazure-sql-database

解决方案


您可以使用 SQL Server 中的 if 且仅 if 语句来完成此操作。 https://www.w3schools.com/sql/func_sqlserver_iif.asp

它看起来像这样:

SELECT
    example.[Value],
    example.[Date], 
    IIF(Value IN ('B','C'), DATEADD(day, 10, example.[Date]), DATEADD(day, 20, example.[Date])) AS NewDate
FROM
    dbo.example

推荐阅读