如何针对查询中的某些条件将字段值更改为null?

时间:2019-08-26 15:35:54

标签: tsql null

我有一个查询,其中我使用TSQL从表中选择数据。当其中一个字段(field1)具有某个值时,我想根据field1的值将其他两个字段(field2和field3)的值更改为NULL。我浏览了堆栈溢出,并看到许多回答说要更新表,如下所示:

UPDATE MyTable
SET MyField = NULL
WHERE MyField = ''

但是更新会更改一个表,对吗?我不想更改表格数据。我想更改查询结果。有没有办法像我想要的那样更改查询结果?

3 个答案:

答案 0 :(得分:0)

CASE (Transact-SQL)文档中所述:

WITH Data (value) AS   
(   
SELECT 0   
UNION ALL   
SELECT 1   
)   
SELECT   
   CASE   
      WHEN MIN(value) <= 0 THEN 0   
      WHEN MAX(1/value) >= 100 THEN 1   
   END   
FROM Data ;

或者您的情况:

SELECT
    MyField = CASE
        WHEN MyField = '' THEN NULL
        ELSE MyField
    END
FROM MyTable

答案 1 :(得分:0)

如果有表field1 | field2 |您想查询field2和field3,但在field1为NULL的情况下,这两个其他字段也应为NULL。因此,在您的情况下:

SELECT field1
, CASE WHEN field1 IS NULL THEN NULL ELSE field2 END AS field2
, CASE WHEN field1 IS NULL THEN NULL ELSE field3 END AS field3
FROM dbo.MyTable

在评论中澄清后更新(1):

SELECT field1
, CASE WHEN field1 = 'IR' THEN NULL ELSE field2 END AS field2
, CASE WHEN field1 <> 'IR' THEN NULL ELSE field3 END AS field3
FROM dbo.MyTable

答案 2 :(得分:0)

我只是将两个CASE语句添加到我的主查询的Select部分中进行了测试运行。运作良好。谢谢您的帮助!

这里是我使用的确切语句。我将结果字段命名为Case#和Payee而不是CaseNo和VendorName,因为SQL调用了结果CaseNo1和VendorName1:

在Accounting_Categories.Name为'I%'的情况下,然后为NULL,否则为Case#, 当Accounting_Categories.Name为'I%',然后VendorName为NULL END时为空