Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server计数查询将结果与总数进行比较_Sql Server_Sql Server 2008 - Fatal编程技术网

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我现在是。谢谢你引起我的注意。谢谢,这很有道理,是解决我问题的办法。