将多行视为SQL Server中的一个项目

时间:2015-02-02 19:36:35

标签: sql sql-server

我有一个invoice_detail表,用于存储所有发票信息。显然,详细信息表存储了每个订单项,以便像这样打开发票:

Ticket_Detail_ID   Ticket_Number   Customer_ID   Service_Code  Total
     1                1                 15           Book1       4.00
     2                1                 15           Book2       5.00
     3                1                 15           Book3       6.00
     4                2                 16           Book1       4.00
     5                2                 16           Book2       5.00
     6                3                 17           Book1       4.00
     7                3                 17           Book2       5.00
     8                3                 17           Book3       6.00  

我想根据Ticket_number选择一个不同的票数,这些票据没有" Book3"服务代码。所以在这个例子中,我会指望:

Ticket 16,因为它没有" Book3"

它将返回:

1

我现在的查询是:

Select Count (Distinct Ticket_Number) as Total
From Invoice_Details
Where Service_Code <> 'Book3'

返回:

6

1 个答案:

答案 0 :(得分:2)

使用NOT EXISTS

SELECT COUNT(DISTINCT Ticket_Number)
FROM dbo.YourTable T
WHERE NOT EXISTS(SELECT 1 FROM dbo.YourTable
                 WHERE Service_Code = 'Book3'
                 AND Ticket_Number = T.Ticket_Number)

Here is an sqlfiddle及其演示。