首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Sql Server查询中忽略Group By中的date列

在Sql Server查询中忽略Group By中的date列
EN

Stack Overflow用户
提问于 2014-01-01 18:30:29
回答 3查看 6.9K关注 0票数 2

我想从表中选择日期列值,但不想按日期分组。有没有可能。因为我想使用其他列对数据进行分组。

代码语言:javascript
复制
SELECT DISTINCT gin.GoodsIssueNoteNumber,gini.GoodsIssueNoteItemNumber, 
                sp.OrgPath,ISNULL(gini.IssuedQuantity,0) as 'Quantity', 
                gin.MRN, sp.SpareName,sp.SysId as 'spareid',
                stc.StoreName,sp.ItemGroupName,sp.PartCode,
                SUM(stc.StockCount) as stockCount,
                SUM(stc.TotalInventoryValue) as StockValue,
                ISNULL(gini.Cost,0) as WeightedAverageItemCost,
                ROUND (gini.IssuedQuantity * gini.Cost,2) as 'TotalIssued Cost',
                gin.Date as 'GIDATE'
FROM vwSpare sp         
INNER JOIN vwGoodsIssueNoteItem gini 
  on sp.SysId=gini.Spare 
INNER JOIN vwGoodsIssueNote gin 
  on gin.SysId in (SELECT AssociatingId FROM GoodsIssueNoteAssociation 
                   WHERE AssociatedId=gini.SysId and IsActive=1)    
LEFT JOIN vwStock stc 
  on stc.Spare=sp.SysId and stc.GoodsIssueNoteId is not null 
 and gin.StoreIDName=stc.StoreName
WHERE IsRepairable=0 and Scrap=0 and Repaired=0 and sp.IsActive=1  
  and gin.IsActive=1 and gin.Date > DATEADD(mm,-6,GETDATE()) and gini.IsActive=1 
GROUP BY sp.SpareName,stc.StoreName,sp.OrgPath,gini.IssuedQuantity,gin.MRN,
         sp.SysId,sp.ItemGroupName,sp.PartCode,gini.Cost,
         gin.GoodsIssueNoteNumber,gini.GoodsIssueNoteItemNumber,gin.Date

我不希望gin.Date出现在group by中

EN

回答 3

Stack Overflow用户

发布于 2014-01-01 18:56:25

SQL要求所有非聚合字段都在GROUP BY子句中。但是,您可以执行以下操作:

代码语言:javascript
复制
SELECT b.ungroupedColumn,  -- your ungrouped columns
       a.* -- your grouped columns
FROM (SELECT Column1, Column2, sum(Column3)
      FROM mytable
      GROUP BY Column1, Column2) a
INNER JOIN mytable b ON a.Column1 = b.Column1

这个想法是,您带回分组的数据,减去额外的列,然后将这些结果连接到表中,以添加未分组的列。

下面是一个示例,假设我有以下产品库存:

代码语言:javascript
复制
Type       Name       Qty
---------- ---------- -----------
Fruit      Apple      1
Fruit      Orange     2
Fruit      Banana     3
Vegetable  Carrot     4
Vegetable  Cucumber   5
Vegetable  Peas       6

我可以运行以下查询:

代码语言:javascript
复制
SELECT b.[Name],
       a.*
FROM (SELECT [Type], sum ([Qty]) as Qty_Of_Type
      FROM Produce
      GROUP BY [Type]) a
INNER JOIN Produce b ON a.[Type] = b.[Type]

它将返回以下结果:

代码语言:javascript
复制
Name       Type       Qty_Of_Type
---------- ---------- -----------
Apple      Fruit      6
Orange     Fruit      6
Banana     Fruit      6
Carrot     Vegetable  15
Cucumber   Vegetable  15
Peas       Vegetable  15
票数 4
EN

Stack Overflow用户

发布于 2014-01-01 18:37:37

对此的简单回答是,您不能这样做。不能读取GroupBY中不存在的列

希望这能帮上忙..

票数 0
EN

Stack Overflow用户

发布于 2014-01-01 18:42:57

正如其他人之前提到的,从技术上讲,这个不能用来完成。但是,出于实际目的-如果您不想在group by子句中使用此日期列,但仍然希望在结果集中显示它,一种选择是使用max()min()函数而不是日期列。在许多实际目的中,这将解决问题。

但在许多其他情况下,这将悄悄地在您的代码中注入一个bug,以便在很长一段时间后被检测到。如果日期列在特定组的所有记录中重复相同的值-上述解决方案将完美地工作。但是,如果同一组下的记录集的日期不同,max()min()将产生错误的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20867674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档