我有一个SQL Server表,其中包含以下字段和示例数据:
USERS TABLE
ID Name Address
23052-PF Peter Timbuktu
23052-D1 Jane Paris
23052-D2 David London
23050-PF Sam Beijing
23051-PF Nancy NYC
23051-D1 Carson Cali
23056-PF Grace LA
年龄表
ID Age
23052-PF 25
23052-D1 22
23052-D2 25
23050-PF 22
23051-PF 26
23051-D1 22
23056-PF 28
我需要在单独的列中返回“年龄”列的ID,姓名,地址,年龄和出现次数。
该表需要根据年龄列的计数按降序排序。
上述样本数据的输出需要如下:
ID Name Address Age Age(Count)
23052-PF Peter Timbuktu 25 3
23056-PF Grace LA 25 3
23051-D1 Carson Cali 25 3
23052-D1 Jane Paris 22 2
23050-PF Sam Beijing 22 2
23052-D2 David London 24 1
23051-PF Nancy NYC 26 1
感谢您的帮助!
答案 0 :(得分:3)
这可以让你得到你想要的东西。
CREATE TABLE #u
(
id nvarchar(100),
Name nvarchar(100),
Address nvarchar(100)
)
INSERT INTO #u
SELECT N'23052-PF', N'Peter', N'Timbuktu' UNION
SELECT N'23052-D1', N'Jane', N'Paris' UNION
SELECT N'23052-D2', N'David', N'London' UNION
SELECT N'23050-PF', N'Sam', N' Beijing' UNION
SELECT N'23051-PF', N'Nancy', N'NYC' UNION
SELECT N'23051-D1', N'Carson', N'Cali' UNION
SELECT N'23056-PF', N'Grace', N'LA'
CREATE TABLE #a
(
id nvarchar(100),
Age int
)
INSERT INTO #a
SELECT N'23052-PF', 25 UNION
SELECT N'23052-D1', 22 UNION
SELECT N'23052-D2', 25 UNION
SELECT N'23050-PF', 22 UNION
SELECT N'23051-PF', 26 UNION
SELECT N'23051-D1', 22 UNION
SELECT N'23056-PF', 28
;WITH
cte AS
(
SELECT
u.id,
u.Name,
u.Address,
a.Age,
COUNT(*) OVER (PARTITION BY a.Age) AS [Age(Count)]
FROM
#u AS u INNER JOIN #a AS a
ON
u.id = a.id
)
SELECT
*
FROM
cte
ORDER BY
[Age(Count)] DESC
答案 1 :(得分:3)
这是另一种方法:
select u.id, u.name, u.address, a.age, count(*) over (partition by ages) as "Age(Count)"
from users u join
ages a
on u.id = a.id
order by "Age(Count)" desc
您也可以使用:
order by 4 desc
虽然不鼓励在order by
中使用列号。