需要 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_UPC
的 min(Brand)
排序吗?
然后你需要先按"Group Min"排序(fiddle:
SELECT *
FROM Table1
ORDER BY
min(Brand) over (partition by Display_UPC),
Display_UPC,
Brand
dnoeth 做了一个很好的解决方案。但我想展示我正在使用的那个。
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
我有一个 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_UPC
的 min(Brand)
排序吗?
然后你需要先按"Group Min"排序(fiddle:
SELECT *
FROM Table1
ORDER BY
min(Brand) over (partition by Display_UPC),
Display_UPC,
Brand
dnoeth 做了一个很好的解决方案。但我想展示我正在使用的那个。
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