我需要什么SQLite语句来获取列名称WHERE有值?
COLUMN NAME: ALPHA BRAVO CHARLIE DELTA ECHO
ROW VALUE: 0 1 0 1 1
我想要的回报是:Bravo,Delta,Echo。
答案 0 :(得分:2)
您的请求并不完全清楚,但您出现要求的SELECT
语句不会返回数据,而是返回列名,而不是可预测的值数,而是取决于表中数据的数字值。
例如,
A B C D E
0 1 0 1 1
将返回(B,D,E)而
A B C D E
1 0 1 0 0
将返回(A,C)。
如果这就是您要问的问题,那么这不是SQL所做的事情。 SQL从表中检索数据,SQL结果集每行的列数始终相同。
要实现目标,您必须检索可能在表中具有值的所有列,然后在程序代码中检查每列中的值并生成列表具有值的列名。
另外,考虑当要检查多行并且值的分布不同时会发生什么。换句话说,如果数据如下所示,预期结果是什么:
A B C D E
- - - - -
0 1 0 1 1
1 0 1 0 0
[另请注意, all 示例中的列有值,有些0,有些1.您真正想要的是列名称列表,其中列包含值1.]
最后,请注意,您无法轻松从数据中获得所需的结果,这可能表明您正在使用的数据模型存在缺陷。例如,如果您要构建这样的数据:
TagName TagValue
------- --------
Alpha 0
Bravo 1
Charlie 0
Delta 1
Echo 1
然后,您可以使用SELECT TagName FROM Tags WHERE TagValue = 1
获取结果。
此外,如果0和1实际上是唯一两个可能的值(表示布尔值"存在"或"缺少"标记),那么您可以删除TagValue列和行完全为Alpha
和Charlie
(您在表格中添加INSERT
行以添加标记,并在行中DELETE
删除它。
沿着这些线的设计似乎可以更准确地为您的数据建模,并允许您将全部新标签发送到系统,而无需发出ALTER TABLE
命令。
答案 1 :(得分:-1)
http://sqlfiddle.com/#!9/1407e/1
SELECT CONCAT(IF(ALPHA,'ALPHA,',''),
IF(BRAVO,'BRAVO,',''),
IF(CHARLIE,'CHARLIE,',''),
IF(DELTA,'DELTA,',''),
IF(ECHO,'ECHO',''))
FROM table1