gpt4 book ai didi

sql - 如果列存在则选择columnValue,否则为null

转载 作者:行者123 更新时间:2023-12-01 18:41:05 24 4
gpt4 key购买 nike

我想知道如果该列存在,我是否可以选择该列的值,否则只选择 null。换句话说,我想“提升”select 语句来处理列不存在的情况。

SELECT uniqueId
, columnTwo
, /*WHEN columnThree exists THEN columnThree ELSE NULL END*/ AS columnThree
FROM (subQuery) s

请注意,我正在巩固我的数据模型和设计。我希望在未来几周内排除这种逻辑,但我真的很想超越这个问题,因为数据模型修复比我现在想要解决的工作更耗时。

另请注意,我希望能够在一个查询中完成此操作。所以我不是在寻找像

这样的答案

check what columns are on your sub query first. Then modify your query to appropriately handle the columns on your sub query.

最佳答案

您无法使用简单的 SQL 语句来完成此操作。除非表中的所有表和列引用都存在,否则 SQL 查询不会编译。

如果“子查询”是表引用或 View ,则可以使用动态 SQL 来执行此操作。

在动态 SQL 中,您可以执行以下操作:

declare @sql nvarchar(max) = '
SELECT uniqueId, columnTwo, '+
(case when exists (select *
from INFORMATION_SCHEMA.COLUMNS
where tablename = @TableName and
columnname = 'ColumnThree' -- and schema name too, if you like
)
then 'ColumnThree'
else 'NULL as ColumnThree'
end) + '
FROM (select * from '+@SourceName+' s
';

exec sp_executesql @sql;

对于实际的子查询,您可以通过检查子查询是否返回具有该列名的内容来近似相同的结果。一种方法是运行查询: select top 0 * into #temp from (<subquery>) s然后检查 #temp 中的列.

编辑:

我通常不会更新这些老问题,而是根据下面的评论。如果“子查询”中的每一行都有唯一标识符,则可以运行以下命令:

select t.. . .,  -- everything but columnthree
(select column3 -- not qualified!
from t t2
where t2.pk = t.pk
) as column3
from t cross join
(values (NULL)) v(columnthree);

子查询将获取 column3如果不存在,则从外部查询中获取。然而,这主要取决于每行都有唯一的标识符。问题明确地与子查询有关,并且没有理由期望可以轻松唯一地标识行。

关于sql - 如果列存在则选择columnValue,否则为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com