Sql 如果字段不为空,请指定一个值

Sql 如果字段不为空,请指定一个值,sql,ms-access,null,field,Sql,Ms Access,Null,Field,我正在做一个关于MS Access的SQL项目。 我想知道是否有一种方法可以在每次字段不为NULL时分配相同的值。我知道有一个Nz函数的作用正好相反,但我不知道其他函数。 此外,每次字段为NULL时,我都希望输入不同的值 我的桌子看起来像那样 date MARCH17 JUNE18 JULY19 date 1 2 PRESENT PRESENT 5 PRESENT 我想得到这样的东西 date MARCH17 JUNE18 JULY19 date 1 2 PRESENT PRE

我正在做一个关于MS Access的SQL项目。 我想知道是否有一种方法可以在每次字段不为NULL时分配相同的值。我知道有一个Nz函数的作用正好相反,但我不知道其他函数。 此外,每次字段为NULL时,我都希望输入不同的值

我的桌子看起来像那样

date


MARCH17
JUNE18

JULY19
date
1
2
PRESENT
PRESENT
5
PRESENT
我想得到这样的东西

date


MARCH17
JUNE18

JULY19
date
1
2
PRESENT
PRESENT
5
PRESENT
如果我必须创建另一个专栏,它也很好


提前谢谢

您需要将新信息放在一个新列中,否则,如果您多次运行查询,您将获得所有信息,因为第一次查询将用序列号替换空日期

如果您有id列,则可以使用:

UPDATE table SET new_column = (SELECT IIF(date IS NULL, id,'PRESENT'))
UPDATE 
    YourTable 
SET 
    [date] = IIf([date] Is Null, 
        (Select Count(*) + 1 From YourTable As T Where T.[date] <> 'PRESENT'),
        'PRESENT'))
WHERE 
    [date] <> 'PRESENT'

如果没有强烈推荐的id列,则需要生成序列号

您的表是否有主键?然后,您需要计算主键小于此主键的所有空值,以给出您的数字,并将present放在不为空的位置。因此,假设您的字段为F1,主键为PK,则以下计算字段

=IIfISNULL[F1],DCOUNT[PK],MYTABLE[PK]您可以使用:

UPDATE table SET new_column = (SELECT IIF(date IS NULL, id,'PRESENT'))
UPDATE 
    YourTable 
SET 
    [date] = IIf([date] Is Null, 
        (Select Count(*) + 1 From YourTable As T Where T.[date] <> 'PRESENT'),
        'PRESENT'))
WHERE 
    [date] <> 'PRESENT'

更难的问题是当字段为空时分配一个值。不,不幸的是,没有主键,当我尝试创建主键时,我得到一个错误谢谢你的回答。我试图在我的表的设计视图中创建一个自动递增字段,但是当我这样做时,我得到以下错误:文件共享锁计数超过了。。。您知道如何继续创建主键吗?