我有这样的表:
let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 40))
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 60, height: 40))
label.text = "Text"
label.textColor = UIColor.red
label.textAlignment = .center
let imageView = UIImageView(frame: CGRect(x: 40, y: 0, width: 40, height: 40))
imageView.image = UIImage(named: "selectdrop")
rightView.addSubview(label)
rightView.addSubview(imageView)
txtField.rightView = rightView
txtField.rightViewMode = .always
我想要一个列在城市内的不同人物的专栏:
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
你能帮我解决一下这个问题吗?
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
答案 0 :(得分:4)
一个变种:
SELECT *
,IIF(ROW_NUMBER() OVER(PARTITION BY City, Person ORDER BY workingdate) = 1, 1, 0)
FROM Persons
对于2012之前的SQL Server,您可以使用:
SELECT P.*
,CASE WHEN DS.[City] IS NULL THEN 0 ELSE 1 END
FROM Persons P
LEFT JOIN
(
SELECT City
,Person
,MIN(workingdate) AS workingdate
FROM Persons
GROUP BY City
,Person
) DS
ON P.City = DS.[City]
AND P.[Person] = DS.[Person]
AND P.[workingdate] = DS.[workingdate]
答案 1 :(得分:2)
我相信这个查询会给你的结果。想法是检查按人和日期排序的先前条目是否不同,这意味着我们达到了新人:
select case
when Person != lag(Person, 1, 'XXXXXX') over (order by Person, workingdate) then 1
else 0
end
from table;
要了解这是如何工作的一个例子:
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.Person, p.City, p.workingdate,
case
when p.Person != lag(p.Person, 1, 'XXXXXX') over (order by p.Person, p.workingdate) then 1
else 0
end
from #Persons p
结果是:
Person City workingdate COLUMN1
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
答案 2 :(得分: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;
测试代码
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;
结果如下:
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