我正在嘗試選擇按 2 列分組的行數。例如,在下表中,我需要為 Brenda 回傳 3,為 Jim 回傳 2。
| 預訂ID | 預訂代表2 | 銷售助理 |
|---|---|---|
| 1 | 布倫達 | |
| 2 | 布倫達 | |
| 3 | 吉姆 | 布倫達 |
| 4 | 吉姆 |
如果人員姓名在 bookingrep2 或 sales_assist 列中,則將其計算在內。我在想這將是一個聯合,但在這種情況下,計數增加了一倍。
為清楚起見已編輯查詢...
SELECT bookingid, sales_assist AS Regional_Rep
FROM bookings
UNION ALL
SELECT bookingid, bookingRep2 AS Regional_Rep
FROM bookings
uj5u.com熱心網友回復:
選項 1:反透視
select u.person
,count(*) as cnt
from bookings as b unpivot (person for col in (bookingrep2, sales_assist)) as u
group by u.person
選項 2:交叉應用 值
select ca.person
,count(*) as cnt
from bookings as b cross apply (values (bookingrep2), (sales_assist)) as ca (person)
where ca.person is not null
group by ca.person
-------- -----
| person | cnt |
-------- -----
| Brenda | 3 |
| Jim | 2 |
-------- -----
小提琴
uj5u.com熱心網友回復:
Employee我猜你可能有這個人的(也許是表)中央表,如果是的話,那么你可以inner join使用這兩個欄位在那個表上,然后group在 ID/Name 上做一個。
declare @booking table(BookingID int not null identity, BookingRep2 varchar(100), SalesAssist varchar(100));
insert into @booking(BookingRep2, SalesAssist)
values ('Brenda', null)
, ('Brenda', null)
, ('Jim', 'Brenda')
, ('Jim', null)
declare @person table(Person varchar(100));
insert into @person(Person)
values ('Brenda')
, ('Jim')
, ('John')
select p.Person, count(1) as TotalTimes
from @booking as b
inner join @person as p on b.BookingRep2 = p.Person
or b.SalesAssist = p.Person
group by p.Person
-- Output:
-- Person | TotalTimes
-- --------|------------
-- Brenda | 3
-- Jim | 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431798.html
