简单的mssql计数不起作用 - 不包含在聚合函数或GROUP BY子句中

时间:2016-08-25 12:06:46

标签: sql-server count

我是SQL的新手,我已经完成了基本的MySQL

所以我有一个查询工作,加入3个表很好,但是我想在OrderItem.ItemNumber字段中计算值的出现次数

所以我尝试了这个:

Select
  [Order].dDispatchBy,
  [Order].dProcessedOn,
  [Order].Source,
  [Order].ExternalReference,
  [Order].nOrderId,
  [Order].bProcessed,
  [Order].CreatedBy,
  [Order].CreatedDate,
  [Order].dReceievedDate,
  [Order].nStatus,
  [Order].ReferenceNum,
  [Order].SubSource,
  OrderItem.fkOrderID,
  OrderItem.fkStockID,
  OrderItem.nQty,
  OrderItem.ItemNumber,
  OrderItem.fkLocationId,
  OrderItem.fkCompositeParentRowId,
  OrderItem.ChannelSKU,
  OrderItem.fkStockItemId,
  OrderItem.fkStockItemId_processed,
  OrderItem.DispatchStockUnitCost,
  OrderItem.ShippingCost,
  OrderItem.SalesTax,
  Count(OrderItem.ItemNumber) As CountMe
From
  [Order] Inner Join
  OrderItem
    On [Order].pkOrderID = OrderItem.fkOrderID Left Join
  StockItem
    On OrderItem.fkStockID = StockItem.pkStockItemID
Where
  Convert(DATETIME,Floor(Convert(FLOAT,[Order].dProcessedOn))) =
  Convert(DATETIME,Floor(Convert(FLOAT,GetDate())))

如果删除该行,这可以正常工作:

Count(OrderItem.ItemNumber) As CountMe

如果我不删除此行,则会收到错误。

  

[FireDAC] [Phys] [ODBC] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]列>' Order.dDispatchBy'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

3 个答案:

答案 0 :(得分:0)

您应该使用&#34中提到的所有列添加group by;选择"除了聚合函数。试试这个,

SELECT [Order].dDispatchBy
    ,[Order].dProcessedOn
    ,[Order].Source
    ,[Order].ExternalReference
    ,[Order].nOrderId
    ,[Order].bProcessed
    ,[Order].CreatedBy
    ,[Order].CreatedDate
    ,[Order].dReceievedDate
    ,[Order].nStatus
    ,[Order].ReferenceNum
    ,[Order].SubSource
    ,OrderItem.fkOrderID
    ,OrderItem.fkStockID
    ,OrderItem.nQty
    ,OrderItem.ItemNumber
    ,OrderItem.fkLocationId
    ,OrderItem.fkCompositeParentRowId
    ,OrderItem.ChannelSKU
    ,OrderItem.fkStockItemId
    ,OrderItem.fkStockItemId_processed
    ,OrderItem.DispatchStockUnitCost
    ,OrderItem.ShippingCost
    ,OrderItem.SalesTax
    ,Count(OrderItem.ItemNumber) AS CountMe
FROM [Order]
INNER JOIN OrderItem ON [Order].pkOrderID = OrderItem.fkOrderID
LEFT JOIN StockItem ON OrderItem.fkStockID = StockItem.pkStockItemID
WHERE Convert(DATETIME, Floor(Convert(FLOAT, [Order].dProcessedOn))) = Convert(DATETIME, Floor(Convert(FLOAT, GetDate())))
GROUP BY [Order].dDispatchBy
    ,[Order].dProcessedOn
    ,[Order].Source
    ,[Order].ExternalReference
    ,[Order].nOrderId
    ,[Order].bProcessed
    ,[Order].CreatedBy
    ,[Order].CreatedDate
    ,[Order].dReceievedDate
    ,[Order].nStatus
    ,[Order].ReferenceNum
    ,[Order].SubSource
    ,OrderItem.fkOrderID
    ,OrderItem.fkStockID
    ,OrderItem.nQty
    ,OrderItem.ItemNumber
    ,OrderItem.fkLocationId
    ,OrderItem.fkCompositeParentRowId
    ,OrderItem.ChannelSKU
    ,OrderItem.fkStockItemId
    ,OrderItem.fkStockItemId_processed
    ,OrderItem.DispatchStockUnitCost
    ,OrderItem.ShippingCost
    ,OrderItem.SalesTax

答案 1 :(得分:0)

数据样本

order1.productcode1,等等等等 order2.productcode2,等等等等 order3.productcode2,等等等等 order4.productcode1,等等等等 order5.productcode1,等等等等 order6.productcode1,等等等等 order7.productcode1等,等

我想知道下面的

结果样本

order1.productcode1,等等等等,5 order2.productcode2,等等等等,2- order3.productcode2,等等等等,2- order4.productcode1,等等等等,5 order5.productcode1,等等等等,5 order6.productcode1,等等等等,5 order7.productcode1,等等等等,5

因为productcode1在整个记录集中被看到5次,所以会说5

答案 2 :(得分:0)

我解决了这个问题,我必须首先制作一个视图,然后使用该视图

选择   计数(*),   StockItem.ItemTitle 从   view_name左连接   StockItem     在view_name.ItemNumber = StockItem.ItemNumber 通过...分组   StockItem.ItemTitle;

有没有人知道制作临时表的另一种方法,我的服务器不允许 或替换视图,我不能删除

我想我想分步进行sql,所以1结果不是那么复杂