我有一个表有一些具有共同组的行:
Id Name Group
1 ABC1 G1
2 ABC2 G1
3 ABC3 G1
4 AXX3 G2
Run Code Online (Sandbox Code Playgroud)
在某些时候,我知道我需要查询的组(例如G1).然后我需要在Name由它们过滤的行中查询字段中最左边最常见的字符Group.所以在这种情况下,我会得到ABC.
这可以在一个查询中执行吗?我需要以最简单的方式做到这一点.
你可以通过暴力来做到这一点:
select groupid,
(case when min(left(name, 10)) = max(left(name, 10)) then left(name, 10)
when min(left(name, 9)) = max(left(name, 9)) then left(name, 9)
when min(left(name, 8)) = max(left(name, 8)) then left(name, 8)
when min(left(name, 7)) = max(left(name, 7)) then left(name, 7)
when min(left(name, 6)) = max(left(name, 6)) then left(name, 6)
when min(left(name, 5)) = max(left(name, 5)) then left(name, 5)
when min(left(name, 4)) = max(left(name, 4)) then left(name, 4)
when min(left(name, 3)) = max(left(name, 3)) then left(name, 3)
when min(left(name, 2)) = max(left(name, 2)) then left(name, 2)
when min(left(name, 1)) = max(left(name, 1)) then left(name, 1)
end) as CommonPrefix
from t
group by groupid;
Run Code Online (Sandbox Code Playgroud)
如果你不太喜欢打字,你也可以这样做:
select groupid,
max(case when min(left(name, n.n)) = max(left(name, n.n)) then left(name, n.n) end)
from t cross join
(select 1 as n union all selet 2 union all select 3 . . .
) n
group by groupid;
Run Code Online (Sandbox Code Playgroud)
(或者使用where子句获取一组的信息。)对于此示例,只需不断向n子查询添加整数,直到达到您想要测试的长度。
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |