我有两个表,其中一个链接表描述了它们的多对多关系。
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。这将是涉及许多其他表的更大查询的一部分。我可以完成所有这一部分,但将行转换为列让我感到烦恼!
答案 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;
看? 小,已知和有限:/
当然,您也可以使用过程库存,但通常不是首选方式。