查询从多个行和列中获取零值

时间:2012-12-19 09:01:42

标签: sql sql-server sql-server-2012

我有以下数据。如何查询从所有行和列中仅获取零。

Timestamp  C1 C2 C3 C4
2012-05-17 1  0  1  0
2012-05-18 0  0  1  0
2012-05-19 1  0  0  1
2012-05-20 0  0  0  0
2012-05-21 0  1  0  0

输出应包含时间戳,c1,c2,c3,c4,其中包含0值。请帮忙!!

我的原始数据如下

Timestamp   TF  TA  TRIM    DG
17-05-2012  0   0.02    0   0.922
18-05-2012  0   0.03    0   0.831787611
19-05-2012  0.8 0.037   0   0.317744455
20-05-2012  0.9 0.06    0   0.56
21-05-2012  0   0.05    0   0.528702213
22-05-2012  0   0.078   0   0.428219784
23-05-2012  0   0.027   0   0.391674726
24-05-2012  0   0.09    0   0.826398887

我尝试了以下查询

select timestamp,TF,TA,DG from temp where TF=0 and TF=0 and DG=0

但是我在没有行和列的情况下输出空输出。我希望看到所有列的值为0作为值的时间戳

5 个答案:

答案 0 :(得分:1)

将条件放在where子句

select * from table_name where  C1=0 or C2=0 or C3=0 or C4=0;

答案 1 :(得分:1)

使用此查询:

select timestamp,c1,c2,c3,c4
from table
where (c1 = 0 and c2 = 0 and c3 = 0 and c4 =0)

答案 2 :(得分:0)

SELECT * FROM {table} where C1 = 0 and  C2 = 0 and C3= 0 and  C4= 0

如果我的问题是对的。

假设您的查询有拼写错误,而您实际上想要检查TF旁边的其他一些列。你可以张贴你的表格原理图吗?也许,通过它的声音,你不处理十进制或某种数字类型。

答案 3 :(得分:0)

我认为你正在寻找这个:

SELECT * FROM <tablename> where C1 = 0 OR C2 = 0 OR C3= 0 OR C4= 0;

编辑 - 根据您的评论,我认为这将有效

SELECT [Timestamp], 
CASE WHEN TF>0 THEN 0 ELSE TF END AS TF,
CASE WHEN TA>0 THEN 0 ELSE TA END AS TA,
CASE WHEN DG>0 THEN 0 ELSE DG END AS DG
FROM <yourtable>
WHERE TF=0 OR TA=0 OR DG=0

但是,这个要求的逻辑超出了我的理解范围。

拉​​吉

答案 4 :(得分:0)

我假设你想要将非零值四舍五入:

select timestamp
    ,ceiling(tf) as c1
    ,ceiling(ta) as c2
    ,ceiling(trim) as c3
    ,ceiling(dg) as c4  
from table 
where tf=0 or ta=0 or trim=0 or dg=0