【问题标题】:Not null column to shift left in mysql非空列在mysql中左移
【发布时间】:2013-09-19 19:12:30
【问题描述】:

我正在研究 MySQL 数据库。 我有一个表empreporting,这个表包含 employeeidreportingemployeeid

SELECT e3.`ReportingEmployeeId` AS Level0,e2.`ReportingEmployeeId` AS Level1,e1.`ReportingEmployeeId` AS Level2,e1.`EmployeeId` AS Level3
FROM empreporting e1
LEFT JOIN empreporting e2 ON e1.`ReportingEmployeeId` = e2.`EmployeeId`
LEFT JOIN empreporting e3 ON e2.`ReportingEmployeeId` = e3.`EmployeeId`

上述查询给出以下结果:

0 级 1 级 2 级 3 级 \N \N 379 369 \N 379 484 372 \N \N \N 379

要求的结果格式是:

0 级 1 级 2 级 3 级 379 369 \N \N 379 484 372 \N 第379章

请任何人帮助我。 提前致谢

普拉卡什

【问题讨论】:

    标签: mysql sql algorithm


    【解决方案1】:

    最后写的查询

    SELECT 
    CASE 
        WHEN e3.`ReportingEmployeeId` IS NOT NULL THEN e3.`ReportingEmployeeId`+1000000 
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NOT NULL THEN e2.`ReportingEmployeeId`
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NOT NULL THEN e1.`ReportingEmployeeId`
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NULL AND e1.`EmployeeId`  IS NOT NULL THEN e1.`EmployeeId` 
    END AS Level0,
    CASE 
        WHEN e3.`ReportingEmployeeId` IS NOT NULL THEN e2.`ReportingEmployeeId`
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NOT NULL THEN e1.`ReportingEmployeeId`
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NOT NULL THEN e1.`EmployeeId`
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NULL AND e1.`EmployeeId`  IS NOT NULL THEN NULL
    END AS Level1,
    CASE 
        WHEN e3.`ReportingEmployeeId` IS NOT NULL THEN e1.`ReportingEmployeeId`
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NOT NULL THEN e1.`EmployeeId` 
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NOT NULL THEN NULL
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NULL AND e1.`EmployeeId`  IS NOT NULL THEN NULL
    END AS Level2,
    CASE
        WHEN e3.`ReportingEmployeeId` IS NOT NULL THEN e1.`EmployeeId` 
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NOT NULL THEN NULL 
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NOT NULL THEN NULL
        WHEN e3.`ReportingEmployeeId` IS NULL AND e2.`ReportingEmployeeId` IS NULL AND e1.`ReportingEmployeeId` IS NULL AND e1.`EmployeeId`  IS NOT NULL THEN NULL
    END AS  Level3
    FROM empreporting e1
    LEFT JOIN empreporting e2 ON e1.`ReportingEmployeeId` = e2.`EmployeeId` 
    LEFT JOIN empreporting e3 ON e2.`ReportingEmployeeId` = e3.`EmployeeId` 
    

    【讨论】:

    • ...那么 e3.ReportingEmployeeId+1000000?那个是从哪里来的?如果没有其他原因,除了你把它全部写出来之外,也可以投票。
    【解决方案2】:

    试试

    SELECT e1.EmployeeId AS Level0,e2.`EmployeeId` AS Level1,e3.`EmployeeId` AS Level2,e3.`ReportingEmployeeId` AS Level3
    FROM empreporting e1
    LEFT JOIN empreporting e2 ON e1.`ReportingEmployeeId` = e2.`EmployeeId`
    LEFT JOIN empreporting e3 ON e2.`ReportingEmployeeId` = e3.`EmployeeId`
    

    【讨论】:

    • 感谢您的快速回复.. :)
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2019-07-16
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多