Sql server Select和count语句

Sql server Select和count语句,sql-server,count,where-clause,Sql Server,Count,Where Clause,我是新来的,正在Microsoft SQL Server 2008上学习SQL。我尝试对订单行项目表执行以下操作,每个记录是一个订单项目。 只有一条记录和一个代码的任何交易编号。 我试过很多方法,但都没有找到答案 Select * from Table where count(transactionnumber)<2 and Code='9987' 以这个代码结束 use XXX Select Orders.TransactionNumber,Orders.RepNumber,

我是新来的,正在Microsoft SQL Server 2008上学习SQL。我尝试对订单行项目表执行以下操作,每个记录是一个订单项目。 只有一条记录和一个代码的任何交易编号。 我试过很多方法,但都没有找到答案

Select * from Table
where count(transactionnumber)<2 and Code='9987'
以这个代码结束

  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'

您的查询应该包括按名称、TransactionNumber等进行分组的内容。进行计数并对其进行约束

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

你可以考虑使用Over关键字,这样你就不需要在计数*周围进行分组了。这样,您就可以不分组地查看计数

Select *, count(*) over (partition by transactioncode) 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

使用counttransactionnumber<2这是我在查询有结果时只发送电子邮件的结果我仍然没有得到正确的结果它给了我每个代码为9987的transactionnumber,而不仅仅是代码为9987的transactionnumber。我尝试了以下方法,但仍然没有得到正确的结果。从订单中选择distinct transactionnumber,其中代码='9987'我得到一组不同的结果,但仍然不是只有一条记录的交易编号。@Hogwilde1请修改您的评论。我根本不知道您的模式,所以是否可以提供更多信息?你得到的是代码为9987的每个TransactionNumber,而不仅仅是代码为9987的TransactionNumber?这对我来说没有意义。某些交易编号是否有多个代码?是的,每个交易编号可以有多个行项目,具有不同的代码和相同的交易编号,因此我认为使用distinct会给我只出现一次的交易编号,然后where会将其定义为仅包含代码的交易编号9987@Hogwilde1你能举个例子吗表结构,以便我可以看到它是什么样子?我可以编辑我的答案,让你更接近你需要的。记录来自现场用户在手持设备上输入订单。他们选择一个客户,然后将项目添加到订单中,这样每个订单可以有多个具有相同交易编号的行项目。行如下:TransactionNumber、RepNumber、CustomerId、ShipToId、ItemCode、Quantity、TimeStart、TimeStop、PONumber、Id、ReceivedDate、TransmitStatus
Select *, count(*) over (partition by transactioncode, itemcode) as "TheCounts"
from table
--where itemcode = 9903
 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