Jac*_*ard 0 sql sql-server group-by sql-order-by
我有一个包含Display_UPC,Brand,Item_Description和其他字段的表.有几个具有相同Display_UPC的项目(所有项目属于同一显示器),并且一些显示器具有多个品牌.
我正在尝试打印一个页面,其中显示所有显示内容(所有Display_UPC一起)和各种项目描述,但按品牌排序(因此它从页面顶部的"A"品牌开始,然后" B"品牌等......).
问题是,如果我尝试:
SELECT DISTINCT *
FROM tbl_All_Displays
ORDER BY Brand, Display_UPC
Run Code Online (Sandbox Code Playgroud)
一些显示器(包含多个品牌的显示器)缺少一些物品,因为它们是不同的品牌.我可以在ORDER BY中删除"Brand",它会一起返回完整的显示,但它们不按品牌(显然)排序.
我猜这里可能需要GROUP BY,但是我无法让它工作.如果我尝试类似的东西:
SELECT DISTINCT *
FROM tbl_All_Displays
GROUP BY Display_UPC
ORDER BY Brand, Display_UPC
Run Code Online (Sandbox Code Playgroud)
我收到错误:
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.
Run Code Online (Sandbox Code Playgroud)
但我需要在页面上显示Item_Description(和其他各种字段).它们在订购/分组中并不重要.
样本数据:
预期结果样本:
因此,基本上,查询在排序中使用的显示中的哪个品牌无关紧要.如果一个展示包含一个品牌,那么它可以属于该品牌"团体",如果这是有道理的.这可能吗?
注意:我删除并重新发布了一个普遍的问题,因为它编辑混乱.
编辑:这是sqlfiddle与示例表数据 - http://sqlfiddle.com/#!6/5069c
你想先按min(Brand)每个排序Display_UPC吗?
然后你需要先按"Group Min"排序(小提琴:
SELECT *
FROM Table1
ORDER BY
min(Brand) over (partition by Display_UPC),
Display_UPC,
Brand
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |