2015-01-26 103 views
0

我是新来的,并在Microsoft SQL Server 2008上学习SQL。我正在尝试为订单行项目的表执行以下操作,每个记录是一个订单项目。 只有一条记录和#####代码的任何交易号码。 我已经尝试了许多方法,但一直没能弄明白选择和计数语句

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' 
+0

使用'HAVING计数(transactionnumber)<2' – 2015-01-26 22:14:26

+0

这是我结束了只有电子邮件如果查询结果 – Hogwilde1 2015-02-10 09:35:16

回答

0

您的查询应该由(姓名,TransactionNumber等),包括东西做组的计数和约束上。

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

我仍然没有得到它给我的代码每次transactionnumber正确的结果9987不只是交易号码只有代码9987.我尝试了以下,但我仍然没有得到正确的结果。从订单 中选择不同的(transactionnumber),其中Code ='9987'我得到一组不同的结果,但仍然没有只有1条记录的交易号码。 – Hogwilde1 2015-01-27 17:51:22

+0

@ Hogwilde1请修改您的评论。我根本不知道你的模式,所以也许提供更多的信息?你使用Code 9987获得每个TransactionNumber,而不是只有* only * code 9987的TransactionNumber?这对我没有意义。一些TransactionNumbers有多个代码吗? – Phoenix 2015-01-27 17:56:23

+0

是的,每个交易号码可以有不同的代码和相同的交易号码的多个行项目,所以我认为使用不同的会给我的交易号码只发生一次,然后在那里定义,只有代码9987 – Hogwilde1 2015-01-27 18:04:58

0

您可以考虑使用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 
0

这里是我结束了对这个似乎大约一个星期一切正常,现在仅执行是否有记录的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