按照我的[问题]:T-SQL 查询一个矩阵表的自由位置 我现在正试图将我的矩阵表作为 LIFO 来处理。每对 (X,Z) 代表一个通道,我可以在其中存储一个元素。当我生成一个位置时,我现在使用上面问题和下面提供的查询。
SELECT x, z, MAX(CASE WHEN disabled = 0 AND occupiedId IS NULL THEN Y ELSE 0 END) firstFreeY
FROM matrix
GROUP BY x, z
ORDER BY x, z;
这是有效的,但它不能处理“漏洞”。事实上,可能从表中删除了禁用标志或手动删除了元素。
如果我的矩阵表看起来像这样:
X Z Y Disabled OccupiedId
--------------------------------------------------
1 1 1 0 591
1 1 2 0 NULL
1 1 3 1 NULL
1 1 4 0 524
1 1 5 0 523
1 1 6 0 522
1 1 7 0 484
1 2 1 0 NULL
1 2 2 0 NULL
1 2 3 0 NULL
1 2 4 0 NULL
1 2 5 0 NULL
1 2 6 0 589
1 2 7 0 592
上述查询的结果是:
X Z firstFreeY
------------------------
1 1 2
1 2 5
代替:
X Y firstFreeY
------------------------
1 1 0
1 2 5
关于如何实现这一目标的任何建议?