Sql server SQL Server计数查询将结果与总数进行比较
我试图返回被完全拒绝的不同发票的数量。一张发票可以有多个行项目。如果发票中的行项目的原因为“无”,而另一行项目的原因为“被拒绝”,则该发票不是完全被拒绝的,不应计算在内 我想要的结果如下Sql server SQL Server计数查询将结果与总数进行比较,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我试图返回被完全拒绝的不同发票的数量。一张发票可以有多个行项目。如果发票中的行项目的原因为“无”,而另一行项目的原因为“被拒绝”,则该发票不是完全被拒绝的,不应计算在内 我想要的结果如下 Client | No. of Invoices Fully Rejected ------------------------------------------- Schogotten | 1 Maiken | 2 从逻辑上讲,我认为我返回的发票数量中,行项目的数量等于每张发票拒绝原因的发
Client | No. of Invoices Fully Rejected
-------------------------------------------
Schogotten | 1
Maiken | 2
从逻辑上讲,我认为我返回的发票数量中,行项目的数量等于每张发票拒绝原因的发票数量
这是你的电话号码
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');
SELECT Client
, COUNT(Invoice)
FROM Tmp
WHERE Reason = 'Rejected'
GROUP BY Client
| CLIENT | COLUMN_1 |
|------------|----------|
| Maiken | 2 |
| Schogotten | 2 |
查询1:
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');
SELECT Client
, COUNT(Invoice)
FROM Tmp
WHERE Reason = 'Rejected'
GROUP BY Client
| CLIENT | COLUMN_1 |
|------------|----------|
| Maiken | 2 |
| Schogotten | 2 |
:
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');
SELECT Client
, COUNT(Invoice)
FROM Tmp
WHERE Reason = 'Rejected'
GROUP BY Client
| CLIENT | COLUMN_1 |
|------------|----------|
| Maiken | 2 |
| Schogotten | 2 |
我将使用子查询查找相关发票,然后使用外部查询按客户分组:
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)
)的发票,其中该原因被拒绝,然后我们只对其进行计数。您知道SQL fiddle在“运行SQL”上有一个“Markdown-uptut”选项吗按钮,你可以简单地粘贴到上述问题中?@Tanner我现在是。谢谢你引起我的注意。谢谢,这很有道理,是解决我问题的办法。