Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite问题:如何在特定行中获取所有非空数据?_Sqlite - Fatal编程技术网

SQLite问题:如何在特定行中获取所有非空数据?

SQLite问题:如何在特定行中获取所有非空数据?,sqlite,Sqlite,好的,如果做一个例子,它会更清楚: RowId Name ID1 ID2 ID3 ID4 ID5 ID6 ID7 ID8 ID9 ID10 1 Alex 11 22 0 0 0 0 14 44 0 0 2 John 0 23 0 0 44 0 33 88 0 77 好的,我想得到以下结果: Alex 11 22 14 44 所以问题的第一部分很清楚 Select * from Table where N

好的,如果做一个例子,它会更清楚:

RowId Name ID1 ID2 ID3 ID4 ID5 ID6 ID7 ID8 ID9 ID10
1     Alex  11  22  0   0   0   0   14  44  0    0
2     John   0  23  0   0   44  0   33  88  0   77
好的,我想得到以下结果:

Alex   11  22  14  44
所以问题的第一部分很清楚

Select * 
from Table
where Name = Alex AND *Now im not sure if i need to use IS NOT NULL or => 1*

以下内容将产生所需的结果:-

SELECT  
    Name ||' '||
    CASE WHEN coalesce(id1,0) <> 0 THEN id1||' ' ELSE '' END
    ||CASE WHEN coalesce(id2,0) <> 0 THEN id2||' ' ELSE '' END
    ||CASE WHEN coalesce(id3,0) <> 0 THEN id3||' ' ELSE '' END
    ||CASE WHEN coalesce(id4,0) <> 0 THEN id4||' ' ELSE '' END
    ||CASE WHEN coalesce(id5,0) <> 0 THEN id5||' ' ELSE '' END
    ||CASE WHEN coalesce(id6,0) <> 0 THEN id6||' ' ELSE '' END
    ||CASE WHEN coalesce(id7,0) <> 0 THEN id7||' ' ELSE '' END
    ||CASE WHEN coalesce(id8,0) <> 0 THEN id8||' ' ELSE '' END
    ||CASE WHEN coalesce(id9,0) <> 0 THEN id9||' ' ELSE '' END
    ||CASE WHEN coalesce(id10,0) <> 0 THEN id10||' ' ELSE '' END
    AS myidlist
    
FROM mytable
WHERE Name = 'Alex'
;
SELECT Name||group_concat(id,' ') AS myidlist FROM mytable2 JOIN mytable2_ids ON Name = Name_reference WHERE name = 'Alex';
这将插入与原始数据等效的数据

INSERT INTO mytable2 VALUES('Alex'),('John');
INSERT INTO mytable2_ids VALUES 
    ('Alex',11),('Alex',22),('Alex',14),('Alex',44)
    ,   ('John',23),('John',44),('John',33),('John',88),('John',77)
;
这是生成相同结果的查询:-

SELECT  
    Name ||' '||
    CASE WHEN coalesce(id1,0) <> 0 THEN id1||' ' ELSE '' END
    ||CASE WHEN coalesce(id2,0) <> 0 THEN id2||' ' ELSE '' END
    ||CASE WHEN coalesce(id3,0) <> 0 THEN id3||' ' ELSE '' END
    ||CASE WHEN coalesce(id4,0) <> 0 THEN id4||' ' ELSE '' END
    ||CASE WHEN coalesce(id5,0) <> 0 THEN id5||' ' ELSE '' END
    ||CASE WHEN coalesce(id6,0) <> 0 THEN id6||' ' ELSE '' END
    ||CASE WHEN coalesce(id7,0) <> 0 THEN id7||' ' ELSE '' END
    ||CASE WHEN coalesce(id8,0) <> 0 THEN id8||' ' ELSE '' END
    ||CASE WHEN coalesce(id9,0) <> 0 THEN id9||' ' ELSE '' END
    ||CASE WHEN coalesce(id10,0) <> 0 THEN id10||' ' ELSE '' END
    AS myidlist
    
FROM mytable
WHERE Name = 'Alex'
;
SELECT Name||group_concat(id,' ') AS myidlist FROM mytable2 JOIN mytable2_ids ON Name = Name_reference WHERE name = 'Alex';
group_concat是一个聚合函数,用于连接一组数据的所有值。在这种情况下,由于没有GROUPBY子句,所以group是所有数据。因此,它获取关联的mytable2_id的id列中的所有值,并将它们连接起来。 结果是:-


空还是0?这并不重要;您必须事先知道需要哪些列。该值是0还是NULL对我来说并不重要。我希望查询只给我带值的结果。为了清楚起见,0或NULL只取决于我输入的默认值,因此在本例中,0表示默认值。我这样问的原因是,表中会有很多collumn,我不想所有的collumn都有,它们都没有值,或者只有默认值。@Ninbushi好吧,这对查询语言和其他需要帮助的人很重要。准确描述你想要的东西很重要。换句话说,您希望所有非空整数值都大于0。由于值是一个相当抽象的概念,因此在大多数编程上下文中,带值的结果不是很有意义。NULL和0有不同的含义。是的,我知道。对我来说,这取决于什么将起作用,如果表达式将不为NULL,那么这些默认值将为NULL。我实际想到的是,如果我从Name=Alex和'ID*`>=0的表中选择,``如果我的示例中的0代表整数0,这会起作用吗?你好,MikeT。谢谢你的回答。整数值将在C中使用,以拥有一个项目数据库,每个整数表示角色将拥有的一个项目。那么,有没有办法让select语句更通用?事实上我发现了一些关于GLOB GLOB'*EN'的东西。但我不知道如何使用。本例中给出的结果格式对我来说并不重要,因为我只读取结果值,而不读取列标识符。因此,结果也可以是SQLite术语:“名称ID1 ID2…”,然后在其下是“Alex 11 22…”对不起,我不知道如何正确设置注释格式。@Ninbushi除非您更改结构/模式,否则您不能更一般。简而言之,当您可能希望存储相关数据(例如每个用户的可变值数)时,您似乎希望将值列表存储为列。对不起,我真的不理解你评论的这一部分:简言之,当你可能想要存储相关数据时,你似乎想要存储一个列形式的值列表,例如每个用户的值的可变数量。我不知道如何以列以外的其他方式存储特定用户/字符的大量整数ID?特别是当我需要在运行时添加更多的collumn时?GLOB操作员的情况如何?选择值大于0的ID是否有帮助?事实上,我不认为这有任何作用。@Ninbushi答案已经更新,以显示一个使用您的数据的示例,但存储为相关数据。再次感谢。看起来我很难理解Select语句可以做什么。我在select下可以使用什么以及必须使用什么语法方面确实存在问题。因此,您在Select语句下使用了Case运算符,仅选择值大于0的COLLMN,对吗?嗯,我想我撞到墙了:-看起来我的思维方向错了。我认为可以在列名称上的select子句中使用所有运算符,但看起来不可能:-