【发布时间】:2015-12-14 14:31:04
【问题描述】:
我有一个包含 Display_UPC、Brand、Item_Description 和其他字段的表。有几个商品具有相同的Display_UPC(所有商品属于同一个展示),有些展示有多个品牌。
我正在尝试打印一个页面,该页面显示所有显示内容(所有 Display_UPC 一起)以及各种项目描述,但按品牌排序(因此它以页面顶部的“A”品牌开头,然后是“B”品牌等...)。
问题是,如果我尝试:
SELECT DISTINCT *
FROM tbl_All_Displays
ORDER BY Brand, Display_UPC
一些展示(包含多个品牌的展示)缺少一些商品,因为它们是不同的品牌。我可以去掉 ORDER BY 中的“品牌”,它会一起返回完整的显示,但它们没有按品牌排序(显然)。
我猜这里可能需要一个 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(和其他各种字段)。它们只是在排序/分组中并不重要。
样本数据:
样本预期结果:
因此,基本上,查询在排序中使用显示中的哪个品牌并不重要。如果一个展示包含一个品牌,那么它属于该品牌“组”是可以的,如果这有意义的话。这可能吗?
注意:我删除并重新发布了一个之前的问题,因为它的编辑很混乱。
编辑:这里是带有示例表数据的 sqlfiddle - http://sqlfiddle.com/#!6/5069c
【问题讨论】:
-
准备sqlfiddle.com你会得到答案
-
好的,我以前从未使用过 sqlfiddle.com。我会尝试在几分钟内完成设置。
-
这里是 sql server sqlfiddle.com/#!6/dfcce/3的示例
-
你为什么要为此创建新问题?正如您在另一个问题中两次建议的那样,您只需将订单更改为 Display_UPC, Brand
-
你的结果没有多大意义。首先是一个以行为标题的空列查询 这是
SQL或Report的要求吗?那么当有其他品牌的商品时,第一行怎么说Gerber?并且结果还包括空行?
标签: sql sql-server group-by sql-order-by