所以我的表有一个NVARCHAR(MAX)列,其中每个条目(路径)都以一个标识符为前缀,例如,带有N个标识符:
id-1\path\to\stuff
id-1\different\path
...
id-2\path\to\stuff
id-2\different\path
...
id-N\path\to\stuff
id-N\different\path
...
我很难提出一个查询来为每个标识符选择一行,并且通过在标识符组中包含最短路径(包括该行中的其他列)来选择每一行。
因此,查询的结果将是总共N行,每个标识符一行,并根据最短的总体路径长度选择行。
我觉得我缺少明显的东西,但是我不确定它是什么。
答案 0 :(得分:4)
您需要计算反斜杠。您可以使用IEnumerator Movement()
{
while (true)
{
Debug.Log("Some action");
yield return new WaitForSeconds(0.8f);
}
}
和len()
来做到这一点。所以:
replace()
select t.*
from (select t.*, row_number() over (partition by id order by len) as seqnum
from t cross apply
( values (len(path) - len(replace(path, '/', ''))) ) v(len)
) t
where seqnum = 1;
只是为查询命名表达式的一种便捷方法。它通过比较带斜线和不带斜线的路径的长度来计算斜线的数量(“路径长度”)。然后cross apply
根据row_number()
对eah id
的行进行排序,最短的len
得到len
的值。