Mysql 如何在SQL select语句中选择组合类别名称?

Mysql 如何在SQL select语句中选择组合类别名称?,mysql,heidisql,Mysql,Heidisql,我有一个选择声明如下: SELECT sales.Added_by as "Added_By", CONCAT(HOUR(sales.Sales_Date), ':00-', HOUR(sales.Sales_Date)+2, ':00') AS Hours, COUNT(sales.Sales_ID) AS `Sales_ID`, sum(sales.Quantity) as "Quantity", sum(sales.Tax_Amount) as "Tax_Amount

我有一个选择声明如下:

SELECT 
  sales.Added_by as "Added_By",
  CONCAT(HOUR(sales.Sales_Date), ':00-', HOUR(sales.Sales_Date)+2, ':00') AS Hours,
  COUNT(sales.Sales_ID) AS `Sales_ID`,
  sum(sales.Quantity) as "Quantity",
  sum(sales.Tax_Amount) as "Tax_Amount",
  sum(sales.Discount_Amount) as "Discount_Amount",
  sum(sales.Total_Price) as "Total_Price",
  sum(sales.Cash) as "Cash",
  sum(sales.Change) as "Change",
  MAX(sales_detail.Category_ID) as "Category_ID",
  MAX(sales_detail.Stock_Name) as "Stock_Name",
  categories.Category_Name
FROM sales
  inner join sales_detail on sales.Sales_Number=sales_detail.Sales_Number
  inner join categories on categories.Category_ID = sales_detail.Category_ID
GROUP BY HOUR(sales.Sales_Date) asc, sales.Added_By asc 
我的问题是如何在中添加类别的名称

MAX(sales_detail.Category_ID) as "Category_ID"
专栏?输出应类似于
1-类别A


非常感谢您的帮助。

mysql特定用途的一种黑客方法
GROUP\u CONCAT
获取按类别id降序排列的每个组的以逗号分隔的类别列表,然后使用
SUBSTRING\u INDEX
字符串函数选择第一个值

SUBSTRING_INDEX(
     GROUP_CONCAT(categories.name ORDER BY categories.Category_ID DESC)
,',',1) "Category_Name",
但我如何才能将其添加到category\u id列中呢


mysql特有的一种黑客方法是使用
GROUP\u CONCAT
为每个组获取以逗号分隔的类别列表,按类别id降序排列,然后使用
SUBSTRING\u INDEX
string函数选择第一个值

SUBSTRING_INDEX(
     GROUP_CONCAT(categories.name ORDER BY categories.Category_ID DESC)
,',',1) "Category_Name",
但我如何才能将其添加到category\u id列中呢


如果分组在一起的所有行的类别名称始终相同,则只需将
categories.category\u name
添加到
GROUP BY
子句中,并像往常一样对列名进行压缩:

SELECT 
  sales.Added_by as "Added_By",
  CONCAT(HOUR(sales.Sales_Date), ':00-', HOUR(sales.Sales_Date)+2, ':00') AS Hours,
  COUNT(sales.Sales_ID) AS `Sales_ID`,
  sum(sales.Quantity) as "Quantity",
  sum(sales.Tax_Amount) as "Tax_Amount",
  sum(sales.Discount_Amount) as "Discount_Amount",
  sum(sales.Total_Price) as "Total_Price",
  sum(sales.Cash) as "Cash",
  sum(sales.Change) as "Change",
  MAX(sales_detail.Category_ID) || ' - ' || categories.Category_Name as "Category_ID",
  MAX(sales_detail.Stock_Name) as "Stock_Name",
  categories.Category_Name
FROM sales
  inner join sales_detail on sales.Sales_Number=sales_detail.Sales_Number
  inner join categories on categories.Category_ID = sales_detail.Category_ID
GROUP BY HOUR(sales.Sales_Date) asc, sales.Added_By asc, categories.Category_Name 

如果分组在一起的所有行的类别名称始终相同,则只需将
categories.category\u name
添加到
GROUP BY
子句中,并像往常一样对列名进行压缩:

SELECT 
  sales.Added_by as "Added_By",
  CONCAT(HOUR(sales.Sales_Date), ':00-', HOUR(sales.Sales_Date)+2, ':00') AS Hours,
  COUNT(sales.Sales_ID) AS `Sales_ID`,
  sum(sales.Quantity) as "Quantity",
  sum(sales.Tax_Amount) as "Tax_Amount",
  sum(sales.Discount_Amount) as "Discount_Amount",
  sum(sales.Total_Price) as "Total_Price",
  sum(sales.Cash) as "Cash",
  sum(sales.Change) as "Change",
  MAX(sales_detail.Category_ID) || ' - ' || categories.Category_Name as "Category_ID",
  MAX(sales_detail.Stock_Name) as "Stock_Name",
  categories.Category_Name
FROM sales
  inner join sales_detail on sales.Sales_Number=sales_detail.Sales_Number
  inner join categories on categories.Category_ID = sales_detail.Category_ID
GROUP BY HOUR(sales.Sales_Date) asc, sales.Added_By asc, categories.Category_Name 

嗨,麦克穆尼,类别将不同。嗨,麦克穆尼,类别将不同。嗨,哈立德,这个选择语句是正确的。但我如何才能同时添加到category _id列中?@Test87您是指id categoryname?像这样的12种食物?@Khalid,非常感谢你的回答,这正是我想要的。令人惊叹的!嗨,Khalid,这个select语句是正确的。但我如何才能同时添加到category _id列中?@Test87您是指id categoryname?像这样的12种食物?@Khalid,非常感谢你的回答,这正是我想要的。令人惊叹的!