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
我是新手,正在学习 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