SQL 问题:在测试查询时,我能否获取不同的行值并将其显示为不同的列?

SQL QUERY: Can I get different row values and display it as different columns when testing query?

this is a sample of the database I am working

I want something like this, displaying specific rows as a column

这里的问题是,当您将 B 行的值显示为附加到 A 行的列时,您需要指定为什么该值恰好来自 B 行(而不是比说,C 行)。您可以在一定程度上发挥它的作用,但这在 MySQL 中越来越被弃用(并且在 SQL 的其他版本中是不可能的)。出于同样的原因,如果您对某些列进行 GROUP BY,则不应在 SELECT; 中指定非 GROUP 或非聚合值;否则引擎应该选择哪个值是不明确的。

所以你问的和对每一列做 JOIN 是一样的:

SELECT maintable.*, 
    b.location_nr AS col2, 
    c.location_nr AS col4, 
    d.location_nr AS col5
FROM maintable
    LEFT JOIN maintable AS b ON (... AND b.type = 2)
    LEFT JOIN maintable AS c ON (... AND c.type = 4)
    LEFT JOIN maintable AS d ON (... AND d.type = 5)
WHERE maintable.type = 42;

所以在这里你得到了所有类型42的记录,那么,如果其中一个(Juan)在同一个table中也有类型2的记录,那么它将出现在列col2中,依此类推上。

如果不存在这样的行,则 col2 的值为 NULL。如果出现不止一个行,那么你会得到多行。

另一种选择:

SELECT ..., 
   (SELECT location_nr FROM maintable AS b WHERE ... AND b.type = 2) AS col2,
   ...

在这里,您也必须为要提取的辅助记录提供 JOIN 条件。

--

就是说,您可能最好更改数据库布局并添加 "attribute" table,只将主要信息保留在主要 table.[=13= 中]