1

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

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 中做到这一点?

注意这将是涉及许多其他表的更大查询的一部分。我可以做所有这部分,但是将行转换为列让我很烦恼!

4

1 回答 1

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;

看 ?已知有限:/

当然,您也可以使用 proc 库存进行操作,但这通常不是首选方式。

于 2012-06-20T07:28:01.097 回答