如何添加计算不同人的任何城市的列

pha*_*don 5 t-sql sql-server

我有这样的表:

Person    City    workingdate
A    Newyork    10.11.2015
A    Newyork    11.11.2015
A    Newyork    12.11.2015
B    Newyork    10.11.2015
B    Newyork    15.11.2015
B    Newyork    16.11.2015
B    Newyork    18.11.2015
Run Code Online (Sandbox Code Playgroud)

我想要一个列出城市内不同人物的专栏:

Person    City    workingdate  countdistinctpersonincity
A    Newyork    10.11.2015             1
A    Newyork    11.11.2015             0
A    Newyork    12.11.2015             0
B    Newyork    10.11.2015             1
B    Newyork    15.11.2015             0
B    Newyork    16.11.2015             0
B    Newyork    18.11.2015             0
Run Code Online (Sandbox Code Playgroud)

你能帮帮我怎么做吗?

CREATE TABLE Persons
(Person varchar(25),
City varchar(255),
workingdate varchar(10));

insert into Persons
values ('A', 'Newyork','10.11.2015'),
('A', 'Newyork','11.11.2015'),
('A', 'Newyork','12.11.2015'),
('B', 'Newyork','10.11.2015'),
('B', 'Newyork','15.11.2015'),
('B', 'Newyork','16.11.2015'),
('B', 'Newyork','18.11.2015');
Run Code Online (Sandbox Code Playgroud)

DVT*_*DVT 2

SELECT p.*, p2.*
FROM #Persons p
    CROSS APPLY 
        (SELECT COUNT (DISTINCT p1.Person) as countdistinctpersonincity
        FROM
            #Persons p1 
        WHERE
            p1.Person <> p.Person
            AND p1.City = p.City
            AND p1.workingdate = p.workingdate) p2;
Run Code Online (Sandbox Code Playgroud)

测试代码

CREATE TABLE #Persons
(Person varchar(25),
City varchar(255),
workingdate varchar(10))
insert into #Persons
values ('A', 'Newyork','10.11.2015'),
('A', 'Newyork','11.11.2015'),
('A', 'Newyork','12.11.2015'),
('B', 'Newyork','10.11.2015'),
('B', 'Newyork','15.11.2015'),
('B', 'Newyork','16.11.2015'),
('B', 'Newyork','18.11.2015');

SELECT p.*, p2.*
FROM #Persons p
    CROSS APPLY 
        (SELECT COUNT (DISTINCT p1.Person) as countdistinctpersonincity
        FROM
            #Persons p1 
        WHERE
            p1.Person <> p.Person
            AND p1.City = p.City
            AND p1.workingdate = p.workingdate) p2;

DROP TABLE #Persons;
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

Person  City      workingdate   countdistinctpersonincity   
A       Newyork   10.11.2015    1   
A       Newyork   11.11.2015    0   
A       Newyork   12.11.2015    0   
B       Newyork   10.11.2015    1   
B       Newyork   15.11.2015    0   
B       Newyork   16.11.2015    0   
B       Newyork   18.11.2015    0   
Run Code Online (Sandbox Code Playgroud)