我想从表中选择日期列值,但不想按日期分组。有没有可能。因为我想使用其他列对数据进行分组。
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中
发布于 2014-01-01 18:56:25
SQL要求所有非聚合字段都在GROUP BY子句中。但是,您可以执行以下操作:
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这个想法是,您带回分组的数据,减去额外的列,然后将这些结果连接到表中,以添加未分组的列。
下面是一个示例,假设我有以下产品库存:
Type Name Qty
---------- ---------- -----------
Fruit Apple 1
Fruit Orange 2
Fruit Banana 3
Vegetable Carrot 4
Vegetable Cucumber 5
Vegetable Peas 6我可以运行以下查询:
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]它将返回以下结果:
Name Type Qty_Of_Type
---------- ---------- -----------
Apple Fruit 6
Orange Fruit 6
Banana Fruit 6
Carrot Vegetable 15
Cucumber Vegetable 15
Peas Vegetable 15发布于 2014-01-01 18:37:37
对此的简单回答是,您不能这样做。不能读取GroupBY中不存在的列
希望这能帮上忙..
发布于 2014-01-01 18:42:57
正如其他人之前提到的,从技术上讲,这个不能用来完成。但是,出于实际目的-如果您不想在group by子句中使用此日期列,但仍然希望在结果集中显示它,一种选择是使用max()或min()函数而不是日期列。在许多实际目的中,这将解决问题。
但在许多其他情况下,这将悄悄地在您的代码中注入一个bug,以便在很长一段时间后被检测到。如果日期列在特定组的所有记录中重复相同的值-上述解决方案将完美地工作。但是,如果同一组下的记录集的日期不同,max()或min()将产生错误的结果。
https://stackoverflow.com/questions/20867674
复制相似问题