Oracle/SQL - 多记录到一个[字符串聚合]
我意识到这是一个荒谬的请求,但我想要做的是将多个记录连同一些文本文本一起拉回到单个列。Oracle/SQL - 多记录到一个[字符串聚合]
所以给定一个表像这样
REGION CITY SID
-------------------
1 Chicago 1234
1 Palatine 567
1 Algonquin 234
1 Wauconda 987
我希望看到回单记录与一列,例如区域等栏目都很好,但像这样
<option value="1234">Chicago</option><option value="567">Palatine</option><option value="234">Algonquin</option><option value="987">Wauconda</option>
一列有关如何做到这一点的任何想法?我运行Oracle 9i和在PL/SQL不能做到这一点
好的表格格式已经改变了一点,但这个想法是一样的
COUNTRY STORECODE STORE_NAME
------------------------------
USA 1234 Chicago
USA 567 Palatine
CAN 987 Toronto
所以我发现这个代码贯通进入链接上市
SELECT COUNTRY,
LTRIM(MAX(SYS_CONNECT_BY_PATH(STORECODE,','))
KEEP (DENSE_RANK LAST ORDER BY curr),',') AS COUNTRY_HTML
FROM (SELECT COUNTRY,
STORECODE,
ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY STORECODE) AS curr,
ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY STORECODE) -1 AS prev
FROM tablename)
GROUP BY COUNTRY
CONNECT BY prev = PRIOR curr AND COUNTRY = PRIOR COUNTRY
START WITH curr = 1;
当我运行它,我看到这个输出
COUNTRY COUNTRY_HTML
--------------------
USA 1234,567
CAN 987
我的想法很简单就是有内选择拉从另一个选择,我做我的商店代码和STORE_NAME像这样需要HTML沿CONCAT ......
SELECT COUNTRY,
LTRIM(MAX(SYS_CONNECT_BY_PATH(RECORD_HTML,','))
KEEP (DENSE_RANK LAST ORDER BY curr),',') AS COUNTRY_HTML
FROM (SELECT COUNTRY,
RECORD_HTML,
ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY RECORD_HTML) AS curr,
ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY RECORD_HTML) -1 AS prev
FROM (SELECT COUNTRY, '<option value="' || STORECODE || '">' || STORE_NAME || '</option>' AS RECORD_HTML FROM tablename))
GROUP BY COUNTRY
CONNECT BY prev = PRIOR curr AND COUNTRY = PRIOR COUNTRY
START WITH curr = 1;
虽然我们的前端环境不接受当我尝试查看结果时出现查询错误:资源无效。在查看之前,您可能需要重新创建修复查询。
我知道错误可能没有帮助,但任何想法为什么我的版本不工作?
谢谢!
这是令人厌恶的,但你可以做这样的事情:
select replace(blah2,',','')
from (select wm_concat(blah) as blah2
from (select '<option value="' || sid || '">' || city || '</option>' as blah
from my_table
)
)
我知道你说这是令人厌恶的,但它也受到XML注入。如果采取这种方法,您需要XML转义sid和城市。 – 2012-02-23 00:46:26
只是要更难 - 没有使用wm_concat() – dscl 2012-02-23 15:03:52
@dscl这样做的任何想法,请注意我不会宽恕这样做。只是指出它作为一个解决方案。您应该参加[WW](http://*.com/users/14663/ww)评论。正如你在9i我会建议'stragg',我[证明](http://*.com/questions/8823509/how-to-concatenate-strings/8825034#8825034)是相同的限制'wm_concat' ,很抱歉...其他方式会更糟。 – Ben 2012-02-23 19:05:43
您可以在Oracle中创建一个聚合函数,参见文档。
你真的,真的确定你不能在你的应用程序中做到这一点? – 2012-02-23 00:45:43
[在Oracle中快速生成连接字符串的方法]的可能重复(http://*.com/questions/7531001/fast-way-to-generate-concatenated-strings-in-oracle) – 2012-02-23 02:59:34
WW。我当然会推动它,但如果我们不能或只是作为一种学习练习,能够做到这一点是非常好的。 – dscl 2012-02-23 14:12:21