我有一个查询,其中我使用TSQL从表中选择数据。当其中一个字段(field1)具有某个值时,我想根据field1的值将其他两个字段(field2和field3)的值更改为NULL。我浏览了堆栈溢出,并看到许多回答说要更新表,如下所示:
UPDATE MyTable
SET MyField = NULL
WHERE MyField = ''
但是更新会更改一个表,对吗?我不想更改表格数据。我想更改查询结果。有没有办法像我想要的那样更改查询结果?
答案 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时为空