我想在基于 ORDER BY 字段的 MySQL 查询中输出行分组 header 。不确定如何解释这一点,因此最好只展示一个我想要完成的任务的示例。
SELECT * FROM products_table
ORDER BY Category, Description
Prod_num Category Description Price
type_1
00001 type_1 Prod 1 $1
00002 type_1 Prod 2 $2
00003 type_1 Prod 3 $3
00004 type_1 Prod 4 $4
00005 type_1 Prod 5 $5
type_2
00006 type_2 Prod 6 $6
00007 type_2 Prod 7 $7
00008 type_2 Prod 8 $8
00009 type_2 Prod 9 $9
type_3
00010 type_3 Prod 10 $10
00011 type_3 Prod 11 $11
我希望在显示该类别的所有产品之前将类别字段显示为行标题。我想我在某处看到过这篇文章,但经过大量搜索后无法弄清楚如何做到这一点,主要是因为我认为我没有使用正确的术语。
最佳答案
我坚信这应该在代码的表示端完成,但是,这就是我过去使用 GROUP BY
和 WITH 完成的方式汇总
:
SELECT Category,
IFNULL(prod_num,'') Prod_Num,
IFNULL(description,'') Description,
IFNULL(price,'') Price
FROM
(
SELECT *
FROM Products_Table
GROUP BY Category,Prod_num,Description,Price
WITH ROLLUP
) AS X
WHERE Category IS NOT NULL
AND (
(Prod_num IS NOT NULL AND Description IS NOT NULL AND Price IS NOT NULL)
OR
(Prod_num IS NULL AND Description IS NULL AND Price IS NULL)
)
ORDER BY Category,Prod_num,Description,Price
这并不是 100% 您所要求的,因为它将类别列放在第一位 - 我还没有充分尝试过它是否可以更改。
结果如下:
CATEGORY PROD_NUM DESCRIPTION PRICE
type_1
type_1 00001 Prod 1 $1
type_1 00002 Prod 2 $2
type_2
type_2 00003 Prod 3 $3
type_2 00004 Prod 4 $4
type_2 00005 Prod 5 $5
type_3
type_3 00006 Prod 6 $6
还有一个样本Fiddle .
http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html
关于MySQL 行标题基于查询中按字段分组的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864931/