如何将 LEFT 连接的结果作为一个字段获取到另一个表中
不确定如何描述这一点,因此我将展示示例:
table PAGES
id int
parent int
name nvarchar
status tinyint
table PAGES_MODULES
id int
id_parent int
module_type nvarchar
module_id int
status int
一个页面可以有多个链接模块。示例记录:
id parent name status
1 -1 Xyz 1
2 -1 Yqw 1
id id_parent module_type module_id status
1 1 ARTICLE 1 1
2 1 GALLERY 2 1
3 2 CATEGORY 3 1
我需要的是创建 select,如果我选择 left join page_modules,则不会返回 2 个结果。
我想选择返回链接的模块,如下所示:
id parent name status modules
1 -1 Xyz 1 ARTICLE GALLERY
2 -1 Yqw 1 CATEGORY
这可能吗?
谢谢。
更新
我在 SELECT 方法中尝试了 COALESE、CROSS APPLY 和 SELECT,并得出以下结论:
http://blog.feronovak.com/2011/10/multiple-values-in-one-column-aka.html
希望我可以在这里发布这些,而不是垃圾邮件或其他什么。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您需要创建一个可以将字符串连接在一起的自定义聚合函数,没有内置的 SQL Server 函数可以执行此操作。
您可以使用 .Net 程序集创建自定义聚合函数(假设您使用最新版本的 SQL)。以下是有关如何执行此操作的 MS 参考(本文中的示例实际上是针对您需要的 CONCATENATE 函数):http://msdn.microsoft.com/en-us/library/ms182741.aspx
You'd need to create a custom aggregate function that could concatenate the strings together, there is no built-in SQL Server function that does this.
You can create a custom aggregate function (assuming your using the latest version of SQL) using a .Net assembly. Here's the MS reference on how to do this (the example in the article is actually for a CONCATENATE function just like you require): http://msdn.microsoft.com/en-us/library/ms182741.aspx
使用 group_concat() 来像这样将多行数据合并到一个字段中。请注意,它确实有长度限制(默认情况下为 1024 个字符),因此如果您要对无数条记录进行 group_concatted,则除非提高限制,否则您只能获得前几行的值。
请注意,它是一个聚合函数,因此您必须有一个 group-by 子句。
Use group_concat() to smoosh multiple rows' worth of data into a single field like that. Note that it does have a length limit (1024 chars by default), so if you're going to have a zillion records being group_concatted, you'll only get the first few lines worth unless you raise the limit.
Note that it IS an aggregate function, so you must have a group-by clause.
您需要连接两个表,然后按 pages.id、pages.parent、pages.status 进行
GROUP BY
、pages.name 和pages.status。结果集中的 modules 字段是一个字符串聚合函数,即在 Oracle 中LISTAGG(pages_modules.modules, ' ') 作为模块
。You need to join both tables and then
GROUP BY
by pages.id, pages.parent, pages.status, pages.name and pages.status. Your modules field in your resultset is then a string aggregate function, i.e in OracleLISTAGG(pages_modules.modules, ' ') as modules
.