2014-10-29 106 views
2

我試圖返回完全拒絕的不同發票的數量。發票可以包含多個訂單項。如果發票的某個訂單項的原因爲'',另一個'已拒絕',那麼它不會被完全拒絕,因此不應計入。SQL Server計數查詢比較結果總數

我想要的結果是合乎邏輯地

Client  | No. of Invoices Fully Rejected 
------------------------------------------- 
Schogotten | 1 
Maiken  | 2 

,我相信我回到那裏的線項目總數等於其中的原因是每張發票的發票被拒絕的次數發票的數量。

這裏是SQL Fiddle

MS SQL Server 2008的架構設置

CREATE TABLE Tmp (
    id int NOT NULL, 
    client varchar (24) NOT NULL, 
    invoice varchar(5) NOT NULL, 
    statusid int NOT NULL, 
    reason varchar (24) 
) 


INSERT INTO Tmp (id, client, invoice, statusid, reason) 
VALUES (12345, 'Schogotten', 'ABC12', -99, 'Rejected') 
, (12346, 'Schogotten', 'ABC12', -99, 'None') 
, (12347, 'Schogotten', 'ABC12', 10001, 'ReadyToPay') 
, (12348, 'Schogotten', 'ABC11', -99, 'Rejected') 
, (12349, 'Schogotten', 'ABC10', -99, 'None') 
, (12350, 'Maiken', 'ABC13', -99, 'Rejected') 
, (12351, 'Maiken', 'ABC14', 9006, 'ReadyToPay') 
, (12351, 'Maiken', 'ABC14', -99, 'None') 
, (12352, 'Maiken', 'ABC15', -99, 'Rejected'); 

查詢1

SELECT Client 
, COUNT(Invoice) 
FROM Tmp 
WHERE Reason = 'Rejected' 
GROUP BY Client 

Results

|  CLIENT | COLUMN_1 | 
|------------|----------| 
|  Maiken |  2 | 
| Schogotten |  2 | 
+0

您是否知道SQL小提琴在「Run SQL」按鈕上有一個「Markdown Ouptut」選項,您可以簡單地將其粘貼到上述問題中? – Tanner 2014-10-29 11:06:10

+0

@坦納我現在。感謝您的關注。 – user1773949 2014-10-29 11:34:28

回答

1

我會用一個子查詢找到相關的發票,然後通過客戶端使用一個外部查詢到組:

select client,COUNT(*) from (
    select client,invoice 
    from Tmp 
    group by client,invoice 
    having MIN(reason) = MAX(reason) and 
    MIN(reason) = 'Rejected' 
) t 
group by client 

凡希望的邏輯是簡單的閱讀 - 子查詢只找到發票哪裏所有行都具有相同的值(MIN(reason) = MAX(reason)),其原因是Rejected,然後我們只計數它們。

+0

謝謝,這是非常有意義的,並且是我的問題的解決方案。 – user1773949 2014-10-29 12:10:59