在同一列SQL中获取两种类型的值
我正在使用SQL Server数据库,我有一个类似这样的问题 不幸的是,为了防止用户在字段中输入任何Null或零值,我必须在SQL中管理此验证 所以从下表中,我有ALINUT_值最后一列-总是10条记录,所以我的问题是如何检查这个只包含null和zero的列在SQL Select中是否没有任何其他值在同一列SQL中获取两种类型的值,sql,sql-server,select,Sql,Sql Server,Select,我正在使用SQL Server数据库,我有一个类似这样的问题 不幸的是,为了防止用户在字段中输入任何Null或零值,我必须在SQL中管理此验证 所以从下表中,我有ALINUT_值最后一列-总是10条记录,所以我的问题是如何检查这个只包含null和zero的列在SQL Select中是否没有任何其他值 ----------------------------------------------------- ALINUT_NUT_Id, ALINUT_Id, ALINUT_ALI_Id, ALIN
-----------------------------------------------------
ALINUT_NUT_Id, ALINUT_Id, ALINUT_ALI_Id, ALINUT_Value
-----------------------------------------------------
1 200463 18822 0.0000
2 200464 18822 0.0000
3 200466 18822 NULL
4 200465 18822 0.0000
5 200467 18822 NULL
6 200468 18822 NULL
7 200469 18822 NULL
8 200462 18822 0.0000
9 200461 18822 0.0000
10 200470 18822 NULL
我在SQL方面的另一个新观点
我有一个产品列表,每个产品包含10行ALINUT_值最后一列
我希望得到的结果是所有产品:
ALINUT_值列仅为null的产品
ALINUT_值列仅为零的产品
ALINUT_值列同时为null和零的产品
忽略其他产品包含其他值,而不仅仅是零和null
这是我的桌子:
PRD_ID, ALI_Id, ALI_ALISRC_Id, ALINUT_NUT_Id, ALINUT_ALI_Id, ALINUT_Value
263 14177 2 1 14177 30.0000
263 14177 2 2 14177 40.0000
263 14177 2 3 14177 60.0000
263 14177 2 4 14177 50.0000
263 14177 2 5 14177 47.0000
263 14177 2 6 14177 80.0000
263 14177 2 7 14177 90.0000
263 14177 2 8 14177 20.0000
263 14177 2 9 14177 10.0000
263 14177 2 10 14177 NULL
304 16880 2 1 16880 NULL
304 16880 2 2 16880 NULL
304 16880 2 3 16880 NULL
304 16880 2 4 16880 NULL
304 16880 2 5 16880 NULL
304 16880 2 6 16880 NULL
304 16880 2 7 16880 NULL
304 16880 2 8 16880 NULL
304 16880 2 9 16880 NULL
304 16880 2 10 16880 NULL
305 16880 2 1 16881 NULL
305 16880 2 2 16881 0
305 16880 2 3 16881 NULL
305 16880 2 4 16881 NULL
305 16880 2 5 16881 0
305 16880 2 6 16881 NULL
305 16880 2 7 16881 NULL
305 16880 2 8 16881 0
305 16880 2 9 16881 NULL
305 16880 2 10 16881 NULL
到目前为止,我所尝试的:
SELECT COUNT(Product.PRD_ID) AS COUNTCOLUMNPRD ,PRD_ID,ALISRC_Name,ALINUT_Value
FROM Product
INNER JOIN Aliment ON ALI_Id = PRD_ALI_Id
INNER JOIN AlimentNutrient on ALI_Id = ALINUT_ALI_Id
LEFT OUTER JOIN AlimentSource ON ALISRC_Id = ALI_ALISRC_Id
WHERE ALISRC_ALISRCT_Id = 2 and ALINUT_Value = 0 OR ALINUT_Value IS NULL
GROUP BY PRD_ID,ALISRC_Name,ALINUT_Value
Having count(Product.PRD_ID) = 10
但它不会得到在alinut_value列中同时包含null和value的产品
谢谢,回答第一个问题:
if (
not exists
(select 1 from MyTable where isnull(ALINUT_Value,0) <> 0)
)
begin
print 'ok'
end
Select *
from yourTable
Where ALINUT_Value Is Null or ALINUT_Value = 0
因此,在你的情况下:
select * from ALINUT where ALINUT_VALUE IS NULL OR ALINUT_VALUE = 0
您可以使用WHERE ALINUT_Value=.NUL。或者,如果ALINUT_Value=在比较之前在列上计算为空,则应避免使用,这通常会阻止使用索引并降低性能。@ASh:谢谢您的回答,您能看看我上面更新的问题吗?谢谢你的回复,你能看看我上面更新的问题吗?Thanks@Blue在你更新的问题中,PRD_ID=263是唯一返回的产品吗?不,263是我不想在输出中包含的唯一产品,只是那些全部为空/全部为零或同时为空和零的产品。感谢我更新了我的新SQL,它可以得到alinut_值列中为null的SQL,但不能同时得到null和zerosTry,其中ALISRC_ALISRCT_Id=2和alinut_值=0或alinut_值为null谢谢你的回答,你能看看我上面更新的问题吗?谢谢
select * from ALINUT where ALINUT_VALUE IS NULL OR ALINUT_VALUE = 0