Sql 数量大于1时不显示空值

Sql 数量大于1时不显示空值,sql,select,view,null,Sql,Select,View,Null,我对sql非常陌生,如果这看起来很简单,那么很抱歉 我正在努力详细说明这个问题,但我不确定使用的功能是否正确 我有一个表,其中包含产品ID的a列,如果该产品ID有不同的选项小、中、大或10cm、20cm、30cm或蓝色、黑绿色等。。还有另一列填充的列b提供属性产品ID。不幸的是,即使您必须选择属性,该列有时也会提供空值,即您不能说您不想要大小或颜色 我试图创建的是一个视图,在该视图中,如果只有1个选项,则显示行。如果有一个选项要显示,则列b将始终为NULL,如果列b中不包含任何NULL值,则还将

我对sql非常陌生,如果这看起来很简单,那么很抱歉

我正在努力详细说明这个问题,但我不确定使用的功能是否正确

我有一个表,其中包含产品ID的a列,如果该产品ID有不同的选项小、中、大或10cm、20cm、30cm或蓝色、黑绿色等。。还有另一列填充的列b提供属性产品ID。不幸的是,即使您必须选择属性,该列有时也会提供空值,即您不能说您不想要大小或颜色

我试图创建的是一个视图,在该视图中,如果只有1个选项,则显示行。如果有一个选项要显示,则列b将始终为NULL,如果列b中不包含任何NULL值,则还将显示行

这是我正在使用的数据的一个示例,您可以看到底部附近的1964和1980具有属性ID,但没有其他空值,其中as 7487和7880同时具有空值和属性ID

产品编号 属性ID 7487 7487 7487-19341 7880 7880-19347 7880 1954 1954 1954-9318 7246 7246 7246-18205 2313 4861 6474 6756 6960 6960 6960-18463 5919 5919 5919-14569 947 2320 2320 2320-3561 7742 3070 3070 3070-17697 7702 1964 1964-2469-2475 2869 2869 2869-14506 1980 1980-2412-5795 6783 6783 6783-18310 7816 1815 1815 1815-1667
如果我理解正确,您只需要在表中没有其他产品值的情况下使用NULL值。如果是:

select t.*
from t
where t.attributeid is not null or
      not exists (select 1
                  from t tt2
                  where t2.productid = t.productid and
                        t2.attributeid is not null
                 );
如果每个产品最多有一个非空属性,则还可以使用聚合:

select productid, max(attributeid)
from t
group by productid;

如果我理解正确,您只需要在表中没有其他产品值的情况下使用NULL值。如果是:

select t.*
from t
where t.attributeid is not null or
      not exists (select 1
                  from t tt2
                  where t2.productid = t.productid and
                        t2.attributeid is not null
                 );
如果每个产品最多有一个非空属性,则还可以使用聚合:

select productid, max(attributeid)
from t
group by productid;

我刚刚意识到这些值不是空的,它们是空的。对不起,我刚刚意识到这些值不是空的,它们是空的。很抱歉