从选择结果将行转换为列

时间:2016-05-06 14:32:31

标签: mysql

我有5个表tb1,tb2,tb3,tb4和tb5

这是选择查询

SELECT c.code_chantier, f.lib_famille, SUM(a.pamp_art * l.qte_ligne) AS Total 
        FROM tb1 c

            JOIN tb2 b ON (c.id_chantier = b.chantier_id_chantier)
            JOIN tb3 l ON (b.id_brc = l.bon_reception_id_reception)
            JOIN tb4 a ON (l.article_id_article = a.id_article)
            JOIN tb5 f ON(a.famille_id_famille = f.id_famille) 
            AND b.type_brc = 2 

            GROUP BY c.code_chantier, f.lib_famille
            ORDER BY Total DESC

这是选择查询的结果

    +---------------+------------------+--------------------+
| code_chantier | lib_famille      | Total              |
+---------------+------------------+--------------------+
| SC-16-23      | TRAVAUX SPECIAUX |            42600.5 |
| SC-16-15      | TRAVAUX SPECIAUX |            42006.5 |
| AJ-16-01      | PEINTURE         | 25018.779836090427 |
| MN-16-03      | PEINTURE         | 22441.573751561686 |
| AJ-16-01      | TRAVAUX SPECIAUX |          8604.6135 |
| SC-16-26      | TRAVAUX SPECIAUX |  7660.799999999999 |
| MN-16-04      | PEINTURE         |  6223.201931872805 |
| RA-16-12      | PEINTURE         |  6118.147946090509 |
| AM-16-01      | TRAVAUX SPECIAUX |  6021.484556962026 |
| CB-16-02      | TRAVAUX SPECIAUX |  5509.265642857144 |

只是想在两列lib_familleTRAVAUX SPECIAUX中显示PEINTURE的出现次数。例如,结果表的标题包含| code_chantier |TRAVAUX | SPECIAUXPEINTURE | Total |

1 个答案:

答案 0 :(得分:1)

您只需选择lib_famille="TRAVAUX SPECIAUX"即可获得包含布尔值的列,告知您该列是否为该列的值。可以说,这不是你应该在你的SQL查询中做的事情,而是在脚本本身。当您决定向该列添加另一个值时,这只会导致您必须在两个地方更改内容。

SELECT c.code_chantier, f.lib_famille="TRAVAUX SPECIAUX" AS "TRAVAUX SPECIAUX", f.lib_famille="PEINTURE" AS "PEINTURE", SUM(a.pamp_art * l.qte_ligne) AS Total