Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一列SQL中获取两种类型的值_Sql_Sql Server_Select - Fatal编程技术网

在同一列SQL中获取两种类型的值

在同一列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

我正在使用SQL Server数据库,我有一个类似这样的问题

不幸的是,为了防止用户在字段中输入任何Null或零值,我必须在SQL中管理此验证

所以从下表中,我有ALINUT_值最后一列-总是10条记录,所以我的问题是如何检查这个只包含null和zero的列在SQL Select中是否没有任何其他值

-----------------------------------------------------
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