如何根据列值将值插入 table

How to insert values to table based on column value

我有一个叫做BranchServices的table,它的结构如下,

FkBranchId  FkServiceId SortValue
6               1           1
7               1           1
8               1           NULL
6               2           2
7               2           2
8               2           NULL
6               3           3

每个分支都有自己的排序顺序 (SortValue)。有些分支没有排序顺序,那个分支 SortValueNULL。当我创建新服务时,我通过交叉连接向此 table 插入值,如下所示,

INSERT INTO BranchServices 
SELECT b.BranchId,
       s.ServiceID,
       NULL
FROM @insertedServiceID s
CROSS JOIN Branch b WHERE b.IsActive = 1

但我需要更改上面的查询。在向每个分支插入新创建的服务 ID 时,我需要检查其当前排序顺序。如果该分支包含 SortValue = NULL 那么我需要插入 SortValue 作为 Null null 如果该分支已经有排序顺序需要插入 0sortValue 如何在插入新创建的服务之前检查分支是否有排序顺序。我可以在交叉连接中检查它吗?那又如何呢?

使用子查询为您插入的 FkBranchId 获取 SortValue

INSERT INTO BranchServices 
SELECT b.BranchId,
  s.ServiceID,
  CASE WHEN(SELECT MIN(SortValue) FROM BranchServices WHERE FkBranchId = b.BranchId) IS NOT NULL THEN 0 END
FROM @insertedServiceID s
CROSS JOIN Branch b WHERE b.IsActive = 1

我使用 MIN() 来确保子查询 return 只有 1 行(MAX() 也可以)。