2016-02-01 48 views
-1

我有一個存儲Invoice詳細信息的數據庫。正如您所期望的,發票的每個細節都列在數據庫中。一些樣本信息:使用In從第二個查詢中提取結果

Invoice#  Service_Type Detail_Code 
1234   1    AB 
1234   2    DF 
1234   5    ER 
1235   1    AB 
1236   1    AB 
1236   2    DF 
1237   1    AB 
1238   1    AB 
1239   1    AB 
1239   3    DZ 

我想編寫一個查詢計算服務中,客戶有「1」的服務類型,並沒有DZ或DF的詳細信息代碼的數量。所以在這種情況下,我的查詢結果是:

"3" 

它將計數發票號碼:

1235 
1237 
1238 

我不太能拿到。這裏是我的查詢:

SELECT Invoice_Number 
FROM Invoice_Detail_Tb 
WHERE (Invoice_Number IN (SELECT Invoice_Number 
          FROM Invoice_Detail_Tb AS Invoice_Detail_Tb_1 
          WHERE (Service_type = '1') 
          AND (Invoice_Date BETWEEN @startdate AND @enddate) 
          AND (Store_Number = @storenumber))) 
    AND (Detail_Code NOT IN ('DF', 'DZ')) 

當我運行此查詢,我不斷地得到「6」,這是與SERVICE_TYPE「1」服務的總數。我錯過了什麼?

回答

0

一種方法是使用EXCEPT

SELECT Invoice_Number 
FROM Invoice_Detail_Tb 
where service_type = '1' 
EXCEPT 
SELECT Invoice_Number 
FROM Invoice_Detail_Tb 
where Detail_Code IN ('DF', 'DZ') 

因爲你不能使用except,您可以使用not exists

SQL Fiddle

SELECT Invoice_Number --use count(*) if you only need count 
FROM Invoice_Detail_Tb t 
where service_type = '1' 
and not exists(select 1 from Invoice_Detail_Tb where invoice_number = t.invoice_number and 
       Detail_Code IN ('DF', 'DZ')) 
+0

我嘗試使用「除「,但它是SQL的舊版本,使用」Except「時遇到」不受支持「異常 – Shmewnix

+0

你的dbms是什麼? –

+0

SQL Server 2000 – Shmewnix

0

使用DISTINCT時,它可以是非常簡單的,獲得唯一的發票編號:

SELECT DISTINCT 
    Invoice_Number 
FROM Invoice_Detail_Tb 
WHERE 
    Service_type = '1' 
    and Detail_Code NOT IN ('DF', 'DZ') 
    and Invoice_Date BETWEEN @startdate AND @enddate 
    and Store_Number = @storenumber 

而對於計數服務:

SELECT 
    Invoice_Number, 
    count(*) as services_Count 
FROM Invoice_Detail_Tb 
WHERE 
    Service_type = '1' 
    and Detail_Code NOT IN ('DF', 'DZ') 
    and Invoice_Date BETWEEN @startdate AND @enddate 
    and Store_Number = @storenumber 
GROUP BY Invoice_Number 
+0

這不是如何與這樣的「詳細」表一起工作。它將返回所有的結果,「service_type'1'」 – Shmewnix

+0

我的壞,從內部子查詢錯過的條件。改變了答案。 –

+0

如果您運行該查詢,它仍然返回所有與service_type 1 – Shmewnix

相關問題