【问题标题】:Query to get zero values from multiple rows and columns [closed]查询以从多行和多列中获取零值[关闭]
【发布时间】:2012-12-19 09:01:41
【问题描述】:

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

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 作为时间戳值的列

【问题讨论】:

  • 预期输出是什么?
  • 我需要值为 0 的时间戳、C1、C2、C3、C4 列。
  • 你已经尝试了什么?
  • 是否希望 c1,c2,c3,c4 值为零的行?
  • @Reyaz:请编辑问题并显示示例的结果集是什么,像这样我不明白这个问题。

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


【解决方案1】:

使用这个查询:

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

【讨论】:

  • 嗨 Ajith,我用我的数据尝试了相同的查询(我的问题中更新了原始数据),但我没有得到任何输出。我没有什么空的,只有列名
  • 那是因为所有列都不会同时有 0。如果您希望任何一列有 0,那么使用 OR 而不是 AND。
  • 是的,我使用了它,但我得到了 0.0246 个值,因为我只期望 0 个值。请问该怎么做?
  • 正在尝试对您的值进行四舍五入并获得 o/p 您能否提供您想要的示例数据作为 o/p?
  • 不,我不想对值进行四舍五入。我需要为所有带有时间戳的列找到唯一的 0 值。 0.xx 不应该考虑。请帮忙
【解决方案2】:

只需将条件放在 where 子句中

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

【讨论】:

    【解决方案3】:

    我想你正在寻找这个:

    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
    

    不过,这个要求的逻辑超出了我的理解。

    拉吉

    【讨论】:

    • 使用这个我也得到了 0 和 0.045,0.4,0.9 的值。但我只需要0。如何做到这一点?
    • 请发布您希望看到的示例输出
    • 嗨,raj,我需要只有 0 的值,而不是 0.0X 或 0.X(不应四舍五入)。我需要这样的输出。以下不是真实数据,但这是一个示例 Timestamp TF TA TRIM DG 17-05-2012 0 0 0 0 18-05-2012 0 0 0 0 19-05-2012 0 0 0 0
    【解决方案4】:

    我假设您希望对非零值进行四舍五入:

    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
    

    【讨论】:

    • 对不起,我不希望非零值被四舍五入。我只需要数据中的零值,并且数据也具有非零值以及十进制 0.9、0.8 之类的东西,而且我的输出也不应该包含这些 0.9 和 0.8,我只需要数据中的零值跨度>
    【解决方案5】:
    SELECT * FROM {table} where C1 = 0 and  C2 = 0 and C3= 0 and  C4= 0
    

    如果我没听错的话。

    假设您的查询有错字,并且您实际上想检查 TF 旁边的其他列两次。你能发布你的表格原理图吗?也许,听上去,你不是在处理小数或某种数字类型。

    【讨论】:

    • 为了提供更好的答案,您应该用几句话来解释它。 OP 似乎对列的正确使用有问题。
    • 我想查询所有带有时间戳的列中只有 0 的值,就像我期望的示例输出如下。我不包括 excat 值。时间戳 TF TA TRIM DG 17-05-2012 0 0 0 0 18-05-2012 0 0 0 0 19-05-2012 0 0 0 0
    • 如果您的列是数字列,并且您使用的是 SQL-SERVER,那么查询将输出列 TF、TA、TRIM 和 DG 中只有 0 的行。要么你正在尝试不同的东西,但你不知道如何问它,要么你在玩特技。
    • 对不起,如果我让你感到困惑。我有非常庞大的 30,000 行数据,其中包含十进制值,包括(0、0.2、1、1.789、1.6879 等)。我需要一个查询来查找所有带有时间戳的列的所有 0 的位置。并且零值不会继续,它可以在任何地方。现在清楚了吗?
    • 好的,我做了一个测试,检查这个链接。告诉我有什么问题??请注意,它不是时间戳,它是 varchar,因为我想获取您的数据,而不是当前的输入时间。 sqlfiddle.com/#!2/08555/2
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2022-01-10
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    相关资源
    最近更新 更多