在同一列中获取两种类型的值SQL
Get two types of value in the same column SQL
我正在使用 SQL 服务器数据库,但我遇到了这样一个问题。
为了防止用户在字段中输入任何 Null 或零值,不幸的是,我必须在 SQL 中管理此验证。
所以从下面的 table 中,我有 ALINUT_Value(最后一列 - 总是 10 条记录),所以我的问题是如何检查此列是否仅包含 NULL 和零(不是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_value(最后一列)
我想要的结果是所有的产品:
- 只有 ALINUT_Value 列为空的产品
- ALINUT_Value 列只有零的产品
- ALINUT_Value 列
的产品为 null 和零
- 忽略其他产品包含其他值而不仅仅是零和 null
这是我的table:
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 和值的产品
谢谢,
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
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
我正在使用 SQL 服务器数据库,但我遇到了这样一个问题。
为了防止用户在字段中输入任何 Null 或零值,不幸的是,我必须在 SQL 中管理此验证。
所以从下面的 table 中,我有 ALINUT_Value(最后一列 - 总是 10 条记录),所以我的问题是如何检查此列是否仅包含 NULL 和零(不是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_value(最后一列)
我想要的结果是所有的产品:
- 只有 ALINUT_Value 列为空的产品
- ALINUT_Value 列只有零的产品
- ALINUT_Value 列 的产品为 null 和零
- 忽略其他产品包含其他值而不仅仅是零和 null
这是我的table:
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 和值的产品谢谢,
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
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