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

时间:2015-02-09 08:10:26

标签: sql sql-server select

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

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

所以从下表中我有ALI​​NUT_Value(最后一列 - 总是10条记录),所以我的问题是如何在SQL Select中检查这列是否包含JUST NULL和Zeros(不是任何其他值)?

-----------------------------------------------------
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_value(最后一列)

我希望拥有的所有产品都是:

  • ALINUT_Value列仅为null的产品
  • ALINUT_Value列仅为零的产品
  • ALINUT_Value列的空值为零的产品
  • 忽略其他产品包含其他值而不仅仅是零和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和值的产品

谢谢,

3 个答案:

答案 0 :(得分:1)

回答最初的问题:

Select *
from yourTable
Where ALINUT_Value Is Null or ALINUT_Value = 0

答案 1 :(得分:1)

create table #temp(col1 int identity(200,1),col2 float)

insert into #temp(col2) values(NULL)
insert into #temp(col2) values(5)
insert into #temp(col2) values(0)
insert into #temp(col2) values(11)

select * from #temp where col2 IS NULL or col2 = 0

所以在你的情况下:

select * from ALINUT where ALINUT_VALUE IS NULL OR ALINUT_VALUE = 0

答案 2 :(得分:0)

if (
    not exists 
    (select 1 from MyTable where isnull(ALINUT_Value,0) <> 0)
    )
begin
    print 'ok'
end