我需要拆分一系列“varchar”响应,以便在创建 DataTable 时显示为新行?

Posted

技术标签:

【中文标题】我需要拆分一系列“varchar”响应,以便在创建 DataTable 时显示为新行?【英文标题】:I need to split a series of 'varchar' responses so that it would appear as a new row when creating a DataTable? 【发布时间】:2014-02-20 16:11:48 【问题描述】:

我需要做的是从存储在数据库中的在线调查问卷中获取答案,并将它们显示为网站上的表格,到目前为止我已经这样做了,它看起来像这样:

    ||User Id |Group   | Q1                 | Q2            | Q3    | Q4   |...
    | 1234    |no group| 30/06/14, 25/08/14,| gs,gm, cl&h   | either|s1    |...
    |         |        | 27/07/14           |               |       |      |...

我现在需要以一种新的方式显示现有数据。需要拆分单元格中的信息,以便在单元格中有多个信息位的地方创建一个新行。不确定描述它的最佳方式,但以上面为例,我需要它看起来像这样:

||User Id |Group   | Q1      | Q2   | Q3    | Q4   |...
| 1234    |no group| 30/06/14| gs   | either|s1    |...
| 1234    |no group| 25/08/14| gm   | either|s1    |...
| 1234    |no group| 27/07/14| cl&h | either|s1    |...

基本上这样每行都使用相同的 UserID、Group 等,但每个 Q1、Q2 等不同。

这是我迄今为止用来实现***示例的代码。

'
' sql to get data
    sql = "select * from TABLE where (datestamp > '" & startDate & "') AND (datestamp < '" & endDate & "') ORDER BY datestamp"

Set fieldTitles = CreateObject("Scripting.Dictionary")
fieldTitles.Add "userID", "User ID"
fieldTitles.Add "grp", "Group"
fieldTitles.Add "q1", "Q1"
fieldTitles.Add "q2", "Q2"
fieldTitles.Add "q3", "Q3"
fieldTitles.Add "q4", "Q4"
fieldTitles.Add "q5", "Q5"
fieldTitles.Add "q6", "Q6"
fieldTitles.Add "q7", "Q7"
fieldTitles.Add "q8", "Q8"
fieldTitles.Add "q9", "Q9"
fieldTitles.Add "qOrder1", "qOrder1"
fieldTitles.Add "qOrder2", "qOrder2"
fieldTitles.Add "qOrder3", "qOrder3"
fieldTitles.Add "qOrder4", "qOrder4"
fieldTitles.Add "datestamp", "Date Stamp"
fieldTitles.Add "Qid", "Qid"
fieldTitles.add "y5grp", "Year 5 Group"

' get the table html
dataString = createDataTableSQL(fieldTitles, sql, "")

我一直在尝试使用“Left(string,length)”来删除开始文本并复制行,但如果字符串长度不同(如第二季度),我不能始终如一地这样做。谁能指出我正确的方向?

【问题讨论】:

我真的很努力......但是......你的第一个表的样本真的是第二个表的来源吗?我对此表示怀疑...例如,第一季度的数据不是 30/06/14、25/08/14 吗?为什么我要问的是“什么”应该被复制?如果“多个值”集中在 1 列中,我的脑海中有一张图片,但是如果 Q1 和 Q2 等多个列中有多个值,最终结果应该是什么样子? 抱歉,编码时间太长了!我在第一张桌子上放错了日期。现在已经更正了。感谢您指出这一点。 【参考方案1】:

纯粹是为了向您展示方法,这可以满足您的需求,不确定我是否同意您以正确的方式开始存储数据,但希望这会有所帮助

选择 独特的 ROWID, 修剪( regexp_substr(Q2, '[^,]+', 1, LEVEL) ) 解码 从 ( 选择 '1234' 作为 USER_ID, 'NO GROUP' 作为 "GROUP", '30/06/14, 25/08/14, 27/07/14' 作为第一季度, 'qs,gm, cl&h' 作为 Q2, '要么' 作为 Q3, 's1' 作为 Q4 从 双重的 ) X 通过修剪连接( regexp_substr(Q2, '[^,]+', 1, LEVEL) ) 不为空 订购方式 行;

【讨论】:

以上是关于我需要拆分一系列“varchar”响应,以便在创建 DataTable 时显示为新行?的主要内容,如果未能解决你的问题,请参考以下文章

将数据拆分为训练/测试文件,以便为两个文件选择至少一个样本

我如何在 AnyLogic 中拆分我的代理,以便一个始终使用一项服务,然后其他人使用另一项服务?

PL/SQL 字符串操作

在 Redshift 中拆分一个 varchar 列

如何创建包含可拖动拆分器的响应式 html div 元素?

如何使此图像地图元素具有响应性?