我想根据以下内容在select查询中显示一列:
1-如果结果不为null,则显示该列。
2-如果结果为null,则不显示该列。
我尝试了这个,但它不起作用,它始终显示列(null或not null)
select
if(surname is null,'',surname) as surname
from my_table
答案 0 :(得分:0)
如果你还想要一个例子......这里是。
B.T.W.此示例具有多个列(id和givenname)。如果您只有一个姓氏列,您可以通过其他方式执行此操作,但这将取决于您的“脚本”的其余部分,如何执行此操作。 (因为在这种情况下select不会返回任何列,而且对于select是无效的)
数据
CREATE TABLE my_table(
id int(11) NOT NULL AUTO_INCREMENT,
surname VARCHAR(20),
givenname VARCHAR(20),
PRIMARY KEY (id)
);
INSERT INTO my_table(givenname, surname) VALUES
("me", null),
("you", null),
(null, null),
("and sombody else", null);
动态SQL
SET @nr_names = (SELECT COUNT(*) FROM my_table WHERE NOT(surname IS null));
SET @fields = (SELECT if(@nr_names=0, "id, givenname", "id, givenname, surname"));
SET @query = CONCAT("select ", @fields, " from my_table");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
将导致
1 me
2 you
3 (null)
4 and sombody else
将数据分组到
INSERT INTO my_table(givenname, surname) VALUES
("me", null),
("you", "works"),
(null, null),
("and sombody else", null);
你得到了
1 me (null)
2 you works
3 (null) (null)
4 and sombody else (null)
Working SQL Fiddle.
(不幸的是,SQL Fiddle不像以前那样缺乏速度)
我不能再让SQL Fiddle工作了。
这是另一种选择:RexTester
看到没有列姓。将一个null更改为插入数据中的文本,然后单击“运行它”。
答案 1 :(得分:0)
根据评论编辑
如果要显示姓氏列,如果一个或多个值为NOT NULL,则可以使用以下IF / ELSE语句:
IF (SELECT COUNT(last_name) from people) > (0)
SELECT first_name, last_name from people;
ELSE
SELECT first_name from people;
请注意,您没有检查COUNT - MSSQL的WHERE子句中的“value IS NULL”或“value = NULL”,我也假设其他版本, not count' null'作为值。
架构1(对于上面的IF / ELSE):
create table people (first_name varchar(20), last_name varchar(20));
insert into people (first_name, last_name) values ('Mary', 'Smith');
insert into people (first_name, last_name) values ('Mark', 'Jones');
insert into people (first_name, last_name) values ('Michael', null);
架构2,如果你想运行它,带有IF / ELSE:
create table people_no_surnames (first_name varchar(20), last_name varchar(20));
insert into people_no_surnames (first_name, last_name) values ('Mary', null);
insert into people_no_surnames (first_name, last_name) values ('Mark', null);
insert into people_no_surnames (first_name, last_name) values ('Michael', null);
IF (SELECT COUNT(last_name) from people_no_surnames) > (0)
SELECT first_name, last_name from people_no_surnames;
ELSE
SELECT first_name from people_no_surnames;
第一个模式将返回两个列(注意surname列中仍然会有一个NULL,所以如果你想用空字符串替换它,你必须把它放在SELECT语句中),第二个模式schema只返回first_name列。
希望这有帮助!