如何从SELECT语句中的两个不同表中排除特定值?

时间:2015-12-16 15:38:59

标签: sql sql-server

我有两张桌子可以说'开始'和'结束',每列五列。 Begin包含Id,T1,T2,T3,T4。 End包含Id,T1E,T2E,T3E,T4E。当我运行查询以通过加入它们从两个表中选择所有内容时,我得到一个结果。但问题是,在结果中有一些行,我得到所有T1,T2,T3,T4,T1E,T2E,T3E,T4E 0.我试图排除所有值为零的列。

请帮我排除T1,T2,T3,T4,T1E,T2E,T3E,T4E = 0的值

谢谢

4 个答案:

答案 0 :(得分:2)

您可以确保所有内容都不等于0:

SELECT ... FROM TA
INNER JOIN TAE ON ...
WHERE T1 <> 0 
    OR T2 <> 0 
    OR T3 <> 0 
    OR T4 <> 0 
    OR T1E <> 0 
    OR T2E <> 0 
    OR T3E <> 0 
    OR T4E <> 0

答案 1 :(得分:1)

WHERE NOT (T1=0 AND T2=0 AND T3=0 AND T4=0 AND T1E=0 AND T2E=0 AND T3E=0 AND T4E=0)

答案 2 :(得分:0)

您可以使用VALUES来构建一个包含所有待检查字段的内联表。然后在此表上执行COUNT以查找所有字段是否等于0

SELECT b.*, e.*
FROM [Begin] AS b
INNER JOIN [End] AS e ON b.Id = e.Id
CROSS APPLY (
  SELECT COUNT(*)
  FROM (VALUES (b.T1), (b.T2), (b.T3), (b.T4),
               (e.T1E), (e.T2E), (e.T3E), (e.T4E)) x(v)
  WHERE x.v = 0) t(cnt)
WHERE t.cnt < 8  

Demo here

答案 3 :(得分:0)

如果无法使用负值,您只需添加它们即可:

WHERE T1 + T2 + T3 + T4 + T1E + T2E + T3E + T4E > 0