微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将多行数据透视到单列

如何解决将多行数据透视到单列

| 我有一个数据库表,其中包含不同产品的类别。每个类别只有一个父项,每个产品可以具有多个类别。我需要为数据迁移构建一种面包屑式导航,但无法弄清楚如何映射数据,这样就不会产生查询的麻烦。 数据库的设置如下:
id     category              sort     parent
1      Home                  0        0
58     Car & Truck           4        1
135    10\' Wide Shelters     0        58
现在,我需要像这样返回数据:
Home/Car & Truck/10\' Wide Shelters
。 使用纯sql是否可能实现此目的,或者我需要混入ColdFusion来获取它。如果我可以使用纯sql来做到这一点,那我将如何做?如果不能,那么ColdFusion会是什么样?     

解决方法

        其他RDBMS支持多种解决此问题的方法(ANSI SQL中的递归“ 2”,Oracle中的“ 3”)。但是在MySQL中,剩下的几乎是嵌套集。     ,        根据用户349433的建议,使用嵌套集,我能够提出此查询
SELECT c1.id AS id1,c1.category AS name1,c2.id AS id2,c2.category AS name2,c3.id AS id3,c3.category AS name3,c4.id AS id4,c4.category AS name4,c5.id AS id5,c5.category AS name5
FROM category c1
LEFT JOIN category AS c2 ON c2.parentid = c1.id
LEFT JOIN category AS c3 ON c3.parentid = c2.id
LEFT JOIN category AS c4 ON c4.parentid = c3.id
LEFT JOIN category AS c5 ON c5.parentid = c4.id
我的数据从未超过5级(我通过使用c6检查并获得空值进行了验证)。从这里我可以对此进行查询
SELECT (name1 + \'/\' + name2 + \'/\' + name3 + \'/\' + name4 + \'/\' + name5) AS category
FROM getCats
WHERE
    <cfloop query=\"Arguments.assignments\">
        (id1 = #Arguments.assignments.categoryid# OR id2 = #Arguments.assignments.categoryid# OR id3 = #Arguments.assignments.categoryid# OR id4 = #Arguments.assignments.categoryid# OR id5 = #Arguments.assignments.categoryid#)
        <cfif Arguments.assignments.currentrow IS NOT Arguments.assignments.recordCount> OR </cfif>
    </cfloop>
我已经对产品及其类别ID进行了查询。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。