1

私は2つのテーブルを持っており、トークンをチケットします。列user_typeとしてのトークン。

がないtokens.ticket_idに参加しているすべてのチケットをカウントする方法を見つけようとしていますtokens.user_type == 'ADMIN'。したがってuser_type、管理者を除いて、何にでも等しくすることができます。

問題は、チケットに他に5つのトークンがある可能性があることです。

私はSQLの知識について合理的なことを知っていますが、これはしばらくの間私を困惑させました。

タイトルが正しく書かれていなかった場合も申し訳ありません。ありがとう、キエラン!

編集

私はそれを間違って説明したかもしれません。しかし、それでも本来よりも多くの結果が返されます。ADMINトークンがある場合は、結果に表示されないはずです。そうでない場合は、表示されるはずです。そして、stackoverflowが編集を行うための実質的でない変更について不平を言っていたので、これを追加します。

4

4 に答える 4

1

試す:

Select Count(*) From Tickets t
Where Not Exists(Select * From tokens
                 Where ticket_Id = t.Ticket_id
                     And user_type ='Admin')
于 2013-03-20T19:21:24.153 に答える
1

このようなものがあなたが探しているものかもしれません:

SELECT
    COUNT(DISTINCT Tickets.id)
FROM
    Tickets
    INNER JOIN Tokens
        ON Tokens.ticket_id = Tickets.id
        AND Tokens.user_type != 'ADMIN'


トークンのないチケットを含める必要がある場合、これはうまくいくかもしれません:

SELECT
    COUNT(DISTINCT Tickets.id)
FROM
    Tickets
    LEFT JOIN Tokens
        ON Tokens.ticket_id = Tickets.id
WHERE
    Tokens.user_type != 'ADMIN'
于 2013-03-20T19:20:30.443 に答える
0

関数の場合のケースの集計を行います。そうすれば、エッジケースの数と合計を言うことができます。

declare @Person Table ( personID int identity, person varchar(8));

insert into @Person values ('Brett'),('Paul'),('John');

declare @Orders table ( OrderID int identity, PersonID int, Description varchar(32), Amount int);

insert into @Orders values (1, 'Shirt', 20),(1, 'Shirt', 50),(1, 'Shirt', 22),(1, 'Admin', 52),(2, 'Shirt', 22),(2, 'Admin', 52);

Select
    p.person
,   count(case when o.Description != 'Admin' then o.orderID end) as NonAdminOrders
,   count(o.orderID) as TotalOrders
from @Person p
    left join @Orders o on p.personID = o.PersonID
group by p.person
于 2013-03-20T19:24:19.517 に答える
0

試す:

SELECT COUNT(DISTINCT Tickets.id) - 
       COUNT(DISTINCT CASE WHEN Tokens.user_type = 'ADMIN' THEN Tickets.id END)
FROM Tickets
LEFT JOIN Tokens ON Tokens.ticket_id = Tickets.id

要約がTokensテーブルからの情報を必要としない場合、これは次のようにより効率的に書き直すことができます。

SELECT COUNT(*)
FROM Tickets
LEFT JOIN Tokens ON Tokens.ticket_id = Tickets.id AND Tokens.user_type = 'ADMIN'
WHERE Tokens.ticket_id IS NULL
于 2013-03-20T19:35:05.033 に答える