终极concat sql mysql需要GODs - 挑战

时间:2017-08-07 20:33:15

标签: mysql group-concat

确定。这是独家新闻。我在一对多的关系中有两张桌子。在表2中,我有三列我希望转换为行数据。为什么?这些将用于与另一个进程(作为数据源)合并以生成文档。请参阅the breakdown 的附件和相关输出。

这是第一个成功获得所需信息的成功查询。

选择 tblClients.fldDRCClientID, fldLastName, e1.fldCreditorName, e1.fldDebtAccountNumber, e1.fldEnrolledDebt 来自tblClients 左连接tblDebtAccountNumber为e1 ON e1.tblClients_fldDRCClientID = tblClients.fldDRCClientID;

firstqueryresults

1 个答案:

答案 0 :(得分:0)

(代表问题作者发布,将其从评论中移出)

这是我的查询:

SELECT idt.fldDRCClientID
    , idt.fldLastName
    , COALESCE(grp.fldCreditorName1, '') as fldCreditorName1
    , COALESCE(grp.fldDebtAccountNumber1, '') as fldDebtAccountNumber1
    , COALESCE(grp.fldEnrolledDebt1, '') as fldEnrolledDebt1
    , COALESCE(grp.fldCreditorName2, '') as fldCreditorName2
    , COALESCE(grp.fldDebtAccountNumber2, '') as fldDebtAccountNumber2
    , COALESCE(grp.fldEnrolledDebt2, '') as fldEnrolledDebt2
    , COALESCE(grp.fldCreditorName3, '') as fldCreditorName3
    , COALESCE(grp.fldDebtAccountNumber3, '') as fldDebtAccountNumber3
    , COALESCE(grp.fldEnrolledDebt3, '') as fldEnrolledDebt3
    , COALESCE(grp.fldCreditorName4, '') as fldCreditorName4
    , COALESCE(grp.fldDebtAccountNumber4, '') as fldDebtAccountNumber4
    , COALESCE(grp.fldEnrolledDebt4, '') as fldEnrolledDebt4
    , COALESCE(grp.fldCreditorName5, '') as fldCreditorName5
    , COALESCE(grp.fldDebtAccountNumber5, '') as fldDebtAccountNumber5
    , COALESCE(grp.fldEnrolledDebt5, '') as fldEnrolledDebt5
    , COALESCE(grp.fldCreditorName6, '') as fldCreditorName6
    , COALESCE(grp.fldDebtAccountNumber6, '') as fldDebtAccountNumber6
    , COALESCE(grp.fldEnrolledDebt6, '') as fldEnrolledDebt6
FROM tblClients idt
LEFT JOIN (
    SELECT d.IndividualNumber as IndividualNumber
        , MAX(CASE WHEN row = 1 THEN d.fldCreditorName END) AS fldCreditorName1
        , MAX(CASE WHEN row = 1 THEN d.fldDebtAccountNumber END) AS fldDebtAccountNumber1
        , MAX(CASE WHEN row = 1 THEN d.fldEnrolledDebt END) AS fldEnrolledDebt1
        , MAX(CASE WHEN row = 2 THEN d.fldCreditorName END) AS fldCreditorName2
        , MAX(CASE WHEN row = 2 THEN d.fldDebtAccountNumber END) AS fldDebtAccountNumber2
        , MAX(CASE WHEN row = 2 THEN d.fldEnrolledDebt END) AS fldEnrolledDebt2
        , MAX(CASE WHEN row = 3 THEN d.fldCreditorName END) AS fldCreditorName3
        , MAX(CASE WHEN row = 3 THEN d.fldDebtAccountNumber END) AS fldDebtAccountNumber3
        , MAX(CASE WHEN row = 3 THEN d.fldEnrolledDebt END) AS fldEnrolledDebt3
        , MAX(CASE WHEN row = 4 THEN d.fldCreditorName END) AS fldCreditorName4
        , MAX(CASE WHEN row = 4 THEN d.fldDebtAccountNumber END) AS fldDebtAccountNumber4
        , MAX(CASE WHEN row = 4 THEN d.fldEnrolledDebt END) AS fldEnrolledDebt4
        , MAX(CASE WHEN row = 5 THEN d.fldCreditorName END) AS fldCreditorName5
        , MAX(CASE WHEN row = 5 THEN d.fldDebtAccountNumber END) AS fldDebtAccountNumber5
        , MAX(CASE WHEN row = 5 THEN d.fldEnrolledDebt END) AS fldEnrolledDebt5
        , MAX(CASE WHEN row = 6 THEN d.fldCreditorName END) AS fldCreditorName6
        , MAX(CASE WHEN row = 6 THEN d.fldDebtAccountNumber END) AS fldDebtAccountNumber6
        , MAX(CASE WHEN row = 6 THEN d.fldEnrolledDebt END) AS fldEnrolledDebt6
    FROM
    (
      SELECT @row := CASE WHEN tblClients_fldDRCClientID = @id 
          THEN @row + 1 ELSE 1 END as row 
        , @id := tblClients_fldDRCClientID as IndividualNumber
          , inf.fldCreditorName
          , inf.fldDebtAccountNumber
          , inf.fldEnrolledDebt
      FROM (SELECT @row := 0, @id := 0) v
        , tblDebtAccountNumber as inf 
      ORDER BY inf.tblClients_fldDRCClientID
    ) d 
    GROUP BY d.IndividualNumber
) grp
    ON grp.IndividualNumber = idt.fldDRCClientID
;

SQL Fiddle