当NODE值N02的NAME不为空(Cherry),取N02的NAME即可,不再考虑其他值,
结果只有一行
Cherry
当NODE值N02的NAME值为空时(#),才考虑取N23和N24的NAME
即两行
Alpha
Tom
也就是说,结果只有两种
Cherry
或
Alpha
Tom
结果不会出现下面这种:
Cherry
Alpha
Tom
~~~~~~~~~~~~~~~~~~~~~~~~
问题:使用SQL 或 SQLScript都可以,如何实现 ?
当NODE值N02的NAME不为空(Cherry),取N02的NAME即可,不再考虑其他值,
结果只有一行
Cherry
当NODE值N02的NAME值为空时(#),才考虑取N23和N24的NAME
即两行
Alpha
Tom
也就是说,结果只有两种
Cherry
或
Alpha
Tom
结果不会出现下面这种:
Cherry
Alpha
Tom
~~~~~~~~~~~~~~~~~~~~~~~~
问题:使用SQL 或 SQLScript都可以,如何实现 ?
引用GPT4和答主提供,参考如下:
你所描述的问题看起来适合使用SQL的CASE WHEN语句和UNION ALL语句来解决。我们先创建一张临时表用于存储你所提到的数据,然后写一个SQL查询来实现你的需求。以下是我为你编写的SQL代码:
CREATE TEMPORARY TABLE temp_table (NODE varchar(255), NAME varchar(255));
INSERT INTO temp_table VALUES ('N01', 'Alpha'), ('N02', 'Cherry'), ('N23', 'Alpha'), ('N24', 'Tom');
SELECT
CASE
WHEN (SELECT NAME FROM temp_table WHERE NODE = 'N02') <> '#' THEN (SELECT NAME FROM temp_table WHERE NODE = 'N02')
END AS 'NAME'
UNION ALL
SELECT
CASE
WHEN (SELECT NAME FROM temp_table WHERE NODE = 'N02') = '#' THEN (SELECT NAME FROM temp_table WHERE NODE IN ('N23', 'N24'))
END AS 'NAME';
这个语句因为使用了UNION ALL,所以在'N02'节点的NAME不为空时,它将返回'N02'节点的NAME值,而在'N02'节点的NAME值为空(或者赋值为'#')时,它将返回'N23'和'N24'节点的NAME值。请注意,根据你的数据库系统,语法可能略有不同。
但是,请注意,如果对应'N02'的NAME值为空时,上述SQL语句时会返回多行记录,你需要在你的程序中进行适当的处理。