我正在尝试在ReportBuilder(数字隐喻,而不是Microsoft)中创建报表,但无法使SQL满足我的要求。

我有一个带有字段building的表:

| building   |
+------------+
| WhiteHouse |
| TajMahal   |


另一个具有字段locations的表:

| id | locations                                                       |
+----+-----------------------------------------------------------------+
| 1  | WhiteHouse:RoseGarden,WhiteHouse:MapRoom,TajMahal:MainSanctuary |
| 2  | TajMahal:NorthGarden,WhiteHouse:GreenRoom                       |


我想创建一个表,显示每个建筑物在locations中使用了多少次,如下所示:

| building   | count |
+------------+-------+
| WhiteHouse | 3     |
| TajMahal   | 2     |


字符:,从未在建筑物或房间名称中使用。甚至假定建筑物名称从不出现在房间名称中的快速解决方案对我来说也足够了。

当然,这几乎可以用任何理智的编程语言来完成(总的来说像/\bWhiteHouse:/这样)。诀窍将是让RB去做。欢迎提供解决方法的建议。

最佳答案

在自定义sql split function的帮助下,可以在SQL Server中使用“,”和“:”字符作为分隔符将位置字符串分成多个部分,如下所示

select
    p2.val,
    count(p2.val)
from locations l
cross apply dbo.split(l.locations,',') p1
cross apply dbo.split(p1.val,':') p2
inner join building b
    on b.building = p2.val
group by p2.val


我不确定mysql中是否有类似的程序,如果是这样,请检查以下解决方案作为模板

07-24 19:06
查看更多