在单独的行上列出重复的结果?

List duplicate results on individual rows?

我有一个从数据库中提取以下信息的查询:

现在,如您所见,我已将 GROUP_CONCAT 添加到查询中,并在 GROUP_CONCAT 列中按 SubmissionId 455,有2个值

想要的结果

我想要实现的是 单独列出每个值,其中具有相同的 SubmissionID 或相同的 FieldValue 或相同的 SubmissionValueId

table 应该是这样的:

SubmissionValueId --- FieldName ---   FieldValue   ---   SubmissionId --- FormId --- GROUP_CONCAT

52133              portofloading1   King Abdullah Port       399            28     King Abdullah Port
64318              portofloading1   Jeddah Seaport           419            28     Jeddah Seaport
74723              portofloading1   King Abdullah Port       439            28     King Abdullah Port
79269              portofloading1   Jeddah Seaport           444            28     Jeddah Seaport
87144    ***       portofloading1   Jeddah Seaport           455            28     Jeddah Seaport
87144    ***       portofloading1   Jeddah Seaport           455            28     Jeddah Seaport
87663              portofloading1   King Abdullah Port       456            28     King Abdullah Port
105786             portofloading1   King Abdullah Port       501            28     King Abdullah Port
109419             portofloading1   King Abdullah Port       508            28     King Abdullah Port
120521             portofloading1   King Abdullah Port       528            28     King Abdullah Port
129869             portofloading1   Jeddah Seaport           548            28     Jeddah Seaport

在 table 中我用 *** 标记的行基本上是我需要做的。我需要单独列出每一行,即使它是重复的(我不知道这是否可能)

这是检索值(图像数据)的代码:

SELECT a.SubmissionValueId, a.FieldName, a.FieldValue, a.SubmissionId, a.FormId, GROUP_CONCAT(a.FieldValue)
FROM    jos_rsform_submission_values a
        INNER JOIN
        (SELECT SubmissionId, FieldName
         FROM jos_rsform_submission_values b
            WHERE FieldName IN ('Status1', 'Status2', 'Status3', 'Status4', 'Status5')
             AND FieldValue = 'Pending'
              AND FormId = 28
         ) AS test
         ON a.SubmissionId = test.SubmissionId
WHERE  a.FieldName = 'portofloading1' AND a.FormId = 28
GROUP BY SubmissionId

我需要单独列出每一个的原因是我需要为 `Status` = 'Pending' 所在的每个字段检索 portofloading 值。因此,如果 `Status1` = 'Pending',它将列出 portofloading1,其中 Status1 && portofloadingSubmissionId 是相等的。

问题是有时您可以 `Status1` = 'Pending'`Status2` = 'Pending'; `Status3` = 'Pending';都是为了同一个 SubmissionId

Status5 之前的所有 Status% 个字段是 "linked" 到 portofloading1。所以这意味着如果 Status1 - Status3 都是 'Pending' 对于 SubmissionId ;查询应该单独列出每一行,即使所有三个字段都具有相同的 portofloading1、相同的 SubmissionValueId 和相同的 SubmissionId如果您使用上述查询检索数据并在 SubmissionId 上使用 INNER JOIN 函数。

老实说,我不知道如何更好地表达我的需求。我希望它有意义。

我试图更彻底地解释这个问题,并提供了数据库的快照 运行 这个查询希望能让它更清楚。

您可以尝试以下 - 删除 group_concat() and group by 子句

SELECT a.SubmissionValueId, a.FieldName, a.FieldValue, a.SubmissionId, a.FormId, a.FieldValue
FROM    jos_rsform_submission_values a
        INNER JOIN
        (SELECT SubmissionId, FieldName
         FROM jos_rsform_submission_values b
            WHERE FieldName IN ('Status1', 'Status2', 'Status3', 'Status4', 'Status5')
             AND FieldValue = 'Pending'
              AND FormId = 28
         ) AS test
         ON a.SubmissionId = test.SubmissionId
WHERE  a.FieldName = 'portofloading1' AND a.FormId = 28