我希望在列值为null时将列值替换为'N',或者在执行查询时没有选择行。请参阅下面的查询:
Select case when ISNULL(myCol,'')='' then 'N' end as col
FROM myTable where <conditions>
如果查询结果为空,我希望myCol
值为'N'。如果可行,请告诉我。
答案 0 :(得分:1)
试试这个:
SELECT ISNULL((SELECT ISNULL(myCol,'N') FROM myTable where <conditions>), 'N')
返回行时使用内部ISNULL
但其值为null,如果查询未返回任何行,则使用外部ISNULL
我的试用版:
CREATE TABLE #APP (ID VARCHAR(20))
INSERT INTO #APP VALUES ('1'), ('2'), ('3'), (NULL)
此查询将返回 M (因为我选择ID = NULL的唯一行)
SELECT ISNULL((SELECT ISNULL(ID,'M') FROM #APP WHERE ID IS NULL), 'N')
此查询将返回 N (因为我不会占用任何行)
SELECT ISNULL((SELECT ISNULL(ID,'M') FROM #APP WHERE ID = '100'), 'N')
答案 1 :(得分:0)
您可以简单地使用ISNULL
的第二个参数将空值替换为不同的值,不需要case
语句:
Select ISNULL(myCol,'N') FROM myTable where <conditions>
要替换空白值(不是NULL
值):
SELECT myCol = COALESCE(NULLIF(LTRIM(RTRIM(myCol)), ''),'N')
FROM myTable where <conditions>
答案 2 :(得分:0)
与填充行联合,如果原始查询返回至少一行
,则排除该行select top(1) with ties col
from(
-- original query
Select ISNULL(myCol,'N') as col
, row_number() over (order by myCol) rn
, 1 priority
from myTable
where <conditions>
-- a filler row
UNION
select 'N' col, 1, 2 -- filler row with low priority
) t
order by row_number() over (partition by rn order by priority);
答案 3 :(得分:0)
以Joe Taras为基础&#39; (正确)回答:
if object_id ( 'tempdb..#APP' ) IS NOT NULL
DROP TABLE #APP
CREATE TABLE #APP (ID VARCHAR(20))
INSERT INTO #APP VALUES ('1'), ('2'), ('3'), (NULL)
SELECT ISNULL((SELECT ISNULL(ID,'N') FROM #APP where ID = 1), 'N')
SELECT ISNULL((SELECT ISNULL(ID,'N') FROM #APP where ID = 2), 'N')
SELECT ISNULL((SELECT ISNULL(ID,'N') FROM #APP where ID = 3), 'N')
SELECT ISNULL((SELECT ISNULL(ID,'N') FROM #APP where ID = 4), 'N')