使用if-else语句设置新列的SQL查询



我有以下格式的数据:

contractid         Contract-data
---------------------------------
1                 {}
1                 {result:A}
1                 Null
1                 Null
2                 Null
2                 Null
2                 Null
3                 Null
3                 {}
3                 {}

我需要得到一个查询才能返回这样的内容。假设一个人只能得到结果:只有A。

Contractid  Flag
-------------------
1          A       // Since one of the rows of contract data contains result:A
2          0       // since all rows of contract data contains null
3          -1      //Since there is no result and only empty {}

有人能帮助在SQL Server中使用SQL选项的指针吗?

对于您的样本数据,以下内容将起作用:

DECLARE @DataSource TABLE
(
[contractid] INT
,[Contract-data] NVARCHAR(MAX)
);
INSERT INTO @DataSource ([contractid], [Contract-data])
VALUES (1, '{}')
,(1, '{result:A}')
,(1, Null)
,(1, Null)
,(2, Null)
,(2, Null)
,(2, Null)
,(3, Null)
,(3, '{}')
,(3, '{}');
SELECT [contractid]
,MAX
(
CASE 
WHEN [Contract-data] IS NULL THEN '0'
WHEN [Contract-data] = '{}' THEN '-1'
WHEN [Contract-data] IS NOT NULL AND [Contract-data] <> '{}' THEN REPLACE(REPLACE([Contract-data], '{result:', ''), '}', '')
END
)
FROM @DataSource
GROUP BY [contractid];

但是您可能需要扩展CASE WHEN语句中的逻辑,因为可能存在各种情况。

如果代码不适用于特定场景,并且您无法自己处理,请告诉我并发表评论。

最新更新