Select 和计数语句

Select and count statement

我是新手,正在学习 SQL Microsoft SQL Server 2008。我正在尝试对 table 订单项执行以下操作,每条记录都是一个订单项。 任何只有一条记录且代码为##### 的交易编号。 试了很多方法都没搞清楚

Select * from Table
where count(transactionnumber)<2 and Code='9987'

我想我明白了。不得不使用不同的代码,因为 QA 没有使用该代码的不同行。如果您看到任何可能导致和出现问题的情况,请告诉我。

Select * from (select Orders.TransactionNumber from Orders
group by Orders.TransactionNumber
having COUNT (Orders.TransactionNumber)=1) as transa

Inner join Orders on transa.TransactionNumber=Orders.TransactionNumber 

where ItemCode=9803

以这段代码结束

  use XXX
  Select Orders.TransactionNumber,Orders.RepNumber, Orders.CustomerID,Orders.ShipToId,orders.ItemCode,Orders.Quantity,Orders.ReceivedDate,Orders.TransmitStatus from (select TransactionNumber from Orders
 group by TransactionNumber
 having COUNT (TransactionNumber)=1) as transa
 Inner join Orders on Orders.TransactionNumber=transa.TransactionNumber
 where ItemCode=9987 and ReceivedDate > DateADD (day, -1, GetDate() )
 IF @@ROWCOUNT > 0
 BEGIN
  EXEC msdb.dbo.sp_send_dbmail
  recipients=N'XXXX',
  @body='Merchandisers orders with only Item Code 9803',
  @subject ='only Item Code 9803',
  @profile_name ='',
  @query =  'Select Orders.TransactionNumber,Orders.RepNumber,Orders.CustomerID,Orders.ShipToId,orders.ItemCode,Orders.Quantity,Orders.ReceivedDate,Orders.TransmitStatus from(select TransactionNumber from Orders
 group by TransactionNumber
 having COUNT (TransactionNumber)<2) as transa
 Inner join Orders on Orders.TransactionNumber=transa.TransactionNumber
 where ItemCode=9803 and ReceivedDate > DateADD (day, -1, GetDate() )'
 END'

您的查询应包括要分组的内容(名称、交易编号等),并对其进行计数和限制。

SELECT TransactionCode, COUNT(*)
FROM TABLE
GROUP BY TransactionCode
HAVING COUNT(*) < 2
AND ItemCode = 9987

您可以考虑使用 OVER 关键字,这样您就不需要在 count(*)group by 周围搞那么多了。这样您就可以在不分组的情况下查看计数。

Select *, count(*) over (partition by transactioncode) as "TheCounts"
from table
--where itemcode = 9903

Select *, count(*) over (partition by transactioncode, itemcode) as "TheCounts"
from table
--where itemcode = 9903

这是我最终得到的结果,它似乎正常工作了大约一个星期,现在它仅在有记录时才执行 sp_send_dbmail。

 Select Orders.TransactionNumber, Orders.RepNumber, Orders.CustomerID,Orders.ShipToId,orders.ItemCode,Orders.Quantity,Orders.ReceivedDate,Orders.TransmitStatus from (select TransactionNumber from Orders
 group by TransactionNumber
 having COUNT (TransactionNumber)=1) as transa

 Inner join Device_Orders on Orders.TransactionNumber=transa.TransactionNumber

 where ItemCode=9987 and ReceivedDate > DateADD (day, -1, GetDate() )

 IF @@ROWCOUNT > 0