需要 SQL 个查询来组合在一起但整体排序

Need SQL query to group together but sort overall

我有一个 table,其中包含 Display_UPC、品牌、Item_Description 和其他字段。有几件商品相同Display_UPC(所有商品属于同一显示器),有些显示器有多个品牌。

我正在尝试打印显示所有显示内容(所有 Display_UPC 一起)以及各种项目描述的页面,但按品牌排序(因此它以 "A" 品牌在页面顶部,然后是 "B" 品牌,等等...)。

问题是,如果我尝试:

SELECT DISTINCT *
FROM tbl_All_Displays
ORDER BY Brand, Display_UPC

一些展示(包含多个品牌的展示)缺少一些项目,因为它们是不同的品牌。我可以去掉 ORDER BY 中的 "Brand",它 returns 一起完整显示,但它们没有按品牌排序(很明显)。

我猜这里可能需要一个 GROUP BY,但我无法使用它。如果我尝试这样的事情:

SELECT DISTINCT *
FROM tbl_All_Displays
GROUP BY Display_UPC
ORDER BY Brand, Display_UPC

我收到错误:

Column 'tbl_All_Displays.Item_Description' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

但我需要 Item_Description(以及其他各种字段)显示在页面上。它们在 ordering/grouping.

中并不重要

示例数据:

样本预期结果:

因此,基本上,查询在排序中使用哪个品牌并不重要。如果显示器包含一个品牌,那么它可以属于该品牌 "group" 如果这有意义的话。这可能吗?

注意:我删除并重新发布了一个以前的问题,因为它因编辑而变得混乱。

编辑:这是带有示例 table 数据的 sqlfiddle - http://sqlfiddle.com/#!6/5069c

您想先按每个 Display_UPCmin(Brand) 排序吗?

然后你需要先按"Group Min"排序(fiddle:

SELECT * 
FROM Table1 
ORDER BY 
   min(Brand) over (partition by Display_UPC),
   Display_UPC, 
   Brand

dnoeth 做了一个很好的解决方案。但我想展示我正在使用的那个。

SQL FIDDLE DEMO

with 
    minBrand as (
       SELECT Display_UPC, MIN(BRAND) Brand
       from Table1
       GROUP BY Display_UPC
    )
select m.Brand MainBrand, t.* 
from minBrand  m
inner join Table1 t    
   on m.Display_UPC = t.Display_UPC
order by m.Brand, t.Display_UPC, t.Brand, t.Item_Description