Sql Group By在结果集中还有一个字段,如group by子句中所示

时间:2011-12-13 16:06:36

标签: tsql

我有一张表,其中包含与特定日期绑定的不同商品。取决于价格变化的日期。我希望得到每个日期最便宜的交易。

我的问题是我使用了一个小组:

选择价格,按日期分类交易日期,价格

要显示商品,我需要更多不在group by子句中的记录。最好的字段是我的autoid,所以如果客户选择具有特定价格的优惠,我可以使用第二个选择显示此优惠及其所有字段。

我希望这样可以更简单地回答我的问题。我尽量保持它的通用性,但我感觉它没有被描述得足够清晰: - )

4 个答案:

答案 0 :(得分:2)

只需将Id列添加到GROUP BY列表

即可
SELECT id, date, price 
FROM products 
GROUP BY id, date, price

否则,Sql Server无法识别要按价格和日期行分组的ID,例如考虑以下两行:

1 | 10-10-2010 | 100 |
2 | 10-10-2010 | 100 |

对于按日期和价格分组的行,应选择哪个Id值?

??? | 10-10-2010 | 100 |

答案 1 :(得分:1)

您需要在ID上指定aggregate function或将其添加到您的group by子句中,例如@sll建议。汇总示例:

SELECT MAX(id), date, price 
FROM products 
GROUP BY date, price

答案 2 :(得分:1)

如果您从选择条款中删除 ID ,您将获得日期价格<的所有不同夫妇的列表/强>

如果您将 ID 添加到 Group By 子句中,因为它是一个标识,您将获得表中每条记录的一行,以便您的< em> Group By 子句没用。

第三种方法是在选择子句中使用 id 上的聚合函数为每个组获取一个值(第一个,最小值,最大值,等)。

答案 3 :(得分:0)

当您进行计数等时,Hi Group by非常有用。

SELECT [Display  Billing Provider], [Display  Insurance Category]
, SUM([TOTAL RVUs]) AS RVUs_08 
, SUM([Units]) AS Units_08
, SUM(Payments) AS Payments_08
FROM dbo.ProductivityAnal_2008
GROUP BY [Display  Billing Provider],[Display  Insurance Category]
ORDER BY [Display  Billing Provider],[Display  Insurance Category]

谢谢安倍