需要SQL查询才能组合在一起但整体排序

时间:2015-09-17 16:09:07

标签: 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
某些显示器(包含多个品牌的显示器)缺少某些商品,因为它们是不同的品牌。我可以在ORDER BY中删除“Brand”,它会一起返回完整的显示,但它们不按品牌排序(显然)。

我猜这里可能需要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(和其他各种字段)。它们在订购/分组中并不重要。

示例数据:

Sample Data

预期结果样本:

Sample Expected Result

因此,基本上,查询在排序中使用的显示中的哪个品牌无关紧要。如果一个展示包含一个品牌,那么它可以属于该品牌“团体”,如果这是有道理的。这可能吗?

注意:我删除了并重新发布了一个普遍的问题,因为编辑很麻烦。

编辑:这是包含样本表数据的sqlfiddle - http://sqlfiddle.com/#!6/5069c

2 个答案:

答案 0 :(得分:7)

您希望先按每个min(Brand)的{​​{1}}排序?

然后你需要按照" Group Min"第一个(fiddle

Display_UPC

答案 1 :(得分:0)

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

<强> SQL FIDDLE DEMO

echo ls | tcsh -l