多列查询到多列进行报告

时间:2012-06-20 03:24:05

标签: mysql many-to-many report

我有两个表,其中一个链接表描述了它们的多对多关系。

TABLE buildings
    building_id
    building_name

TABLE facility_types
    facility_type_id
    facility_type

TABLE buildings_2_facility_types
    building_id
    facility_type_id

现在我需要一份报告,包括每个建筑物的设施类型

REPORT:

  NAME        golf    pool    garage
Building A     Y        N        Y
Building B     N        Y        Y
Building C     N        N        N

如何在SQL中执行此操作?

N.B。这将是涉及许多其他表的更大查询的一部分。我可以完成所有这一部分,但将行转换为列让我感到烦恼!

1 个答案:

答案 0 :(得分:1)

将行转换为列是一件非常痛苦的事情,您必须了解SQL实际上不适用于此类操作。

如果要转置的值集是已知有限,这仍然是可能的。如果没有,你将不得不依赖你的应用层。

如何做到这一点的例子应该有助于你理解3个条件:

假设表buildings_2_facility_types

building_id facility_type_id
    1               1
    1               2
    2               3
    3               1
    3               3

你可以通过这种方式摆脱它:

SELECT
    building_id,
    IF(SUM(facility_type_id = 1) > 0, "Y", "N") as facility_type_1,
    IF(SUM(facility_type_id = 2) > 0, "Y", "N") as facility_type_2,
    IF(SUM(facility_type_id = 3) > 0, "Y", "N") as facility_type_3
FROM buildings_2_facility_types
GROUP BY building_id;

看? 已知有限:/

当然,您也可以使用过程库存,但通常不是首选方式。