SQL查询:选择Column1,行数(criteria1),行数(criteria2)

Sab*_*abz 2 .net c# sql sql-server oledb

我需要一个小的SQL查询帮助.请考虑下表:

TicketNo | Rules          | Audit Result
---------------------------------
PR123   | some random strings | Audited
PR123   | some random strings | Not Audited
PR123   | some random strings | Audited
PR123   | some random strings | Audited
PR123   | some random strings | Not Audited
PR123   | some random strings | Not Audited
PR123   | some random strings | Audited
PR999   | some random strings | Audited
PR999   | some random strings | Audited
PR999   | some random strings | Audited
PR999   | some random strings | Audited
PR999   | some random strings | Audited
PR111   | some random strings | Not Audited
PR111   | some random strings | Not Audited
PR111   | some random strings | Not Audited
PR111   | some random strings | Not Audited
Run Code Online (Sandbox Code Playgroud)

我需要以下结果:

Ticket | Count of Audited Rules | Count of NOT-Audited Rules
------------------------------------------------------------    
PR123   |   4           |   3   
PR999   |   5       |   0   
PR111   |   0       |   4   
Run Code Online (Sandbox Code Playgroud)

我试过了:

Select T1.TicketNo,T1.Audited_Count,T2.NonAudited_Count
FROM
(
    Select [TicketNo], COUNT([TicketNo]) AS Audited_Count
    from [Resolved Results$] where [Audit Result] = 'Audited'
    group  by TicketNo
) T1
inner JOIN
(
    Select [TicketNo], COUNT([TicketNo]) AS NonAudited_Count
    from [Resolved Results$] where [Audit Result] <> 'Audited'
    group  by TicketNo
) T2
on T1.[TicketNo] = T2.[TicketNo]
Run Code Online (Sandbox Code Playgroud)

但是上述命令不适用于那些具有唯一审核规则或仅有未经审核的规则的票证,但仅适用于具有这两种规则的票证.

有人可以帮我解决一下这个问题吗?

请注意:只有内部联接与OleDB一起使用,因此请避免使用除内部联接之外的任何内容.非常感谢

编辑:戈登的第一个答案应该理想的工作,但不幸的是Excel的OLEDB驱动程序不支持它.但是,戈登建议使用iff(..)工作.

我正在使用的最终查询是:

select [TicketNo],
       sum(iif([Audit Result] = "AUDITED", 1, 0)) as Audited,
       sum(iif([Audit Result] = "NOT AUDITED", 1, 0)) as NotAudited
from [Resolved Results$]
group by [TicketNo];
Run Code Online (Sandbox Code Playgroud)

谢谢戈登!

Gor*_*off 6

您需要条件求和,您可以通过在以下内容中放置一个case语句来完成sum():

select ticket,
       sum(case when AuditResult = 'Audited' then 1 else 0 end) as Audited,
       sum(case when AuditResult = 'Not Audited' then 1 else 0 end) as NotAudited
from t
group by ticket;
Run Code Online (Sandbox Code Playgroud)

这假设AuditResult是一个单独的列.如果是最终评论SomeStrings,那么查询将如下所示:

select ticket,
       sum(case when SomeStrings like '%Audited' and SomeStrings not like '%Not Audited' then 1
                else 0
           end) as Audited,
       sum(case when SomeStrings like '%Not Audited' then 1
                else 0
           end) as NotAudited
from t
group by ticket;
Run Code Online (Sandbox Code Playgroud)