gpt4 book ai didi

两个组列的 SQL 语句

转载 作者:行者123 更新时间:2023-12-03 00:12:18 25 4
gpt4 key购买 nike

我在为 sqlserver2008 创建 SQL 语句时遇到问题。我有以下数据:

city     person     priority
-----------------------------------
Linz Mike 1
Wien Mike 1
Linz Tom 1
Wien Tom 1
Linz John 1
Linz Sarah 2

这意味着MikeTom选择优先级为1的城市LinzWien。< br/>John 选择优先级为 1 的 Linz
莎拉选择优先级为2的林茨

现在我想要以下输出:

cities          persons          priority
-----------------------------------
Linz, Wien Mike, Tom 1
Linz John 1
Linz Sarah 2

我已经有以下 SQL 语句,但没有得到预期结果,因为该查询会说 John 也有一个优先级为 1 的 Wien 条目。

SELECT
(SELECT
STUFF((SELECT ', ' + d.City
FROM (SELECT DISTINCT d2.City FROM dbo.DummyTable d2
WHERE d2.Priority = d1.Priority) d
FOR XML PATH('')), 1, 2, '')
)
AS Cities,
(SELECT
STUFF((SELECT ', ' + d.Person
FROM (SELECT DISTINCT d2.Person FROM dbo.DummyTable d2
WHERE d2.Priority = d1.Priority) d
FOR XML PATH('')), 1, 2, '')
)
AS Persons,
d1.Priority
FROM
dbo.DummyTable d1
GROUP BY d1.Priority

您还可以使用此SQL Fiddle

有什么想法可以用 SQL 编写这个查询吗?

最佳答案

这是一种方法:

;with PersonCityGroupPreferences as (
select
Person,
Priority,
stuff ((
select ', ' + d2.City
from DummyTable d2
where d1.Priority = d2.Priority
and d1.Person = d2.Person
FOR XML PATH('')
), 1, 2, '') Cities
from DummyTable d1
group by Person, Priority
)
select
Cities,
stuff ((
select ', ' + p2.Person
from PersonCityGroupPreferences p2
where p1.Cities = p2.Cities
and p1.Priority = p2.Priority
FOR XML PATH('')
), 1, 2, '') Persons,
Priority
from PersonCityGroupPreferences p1
group by Priority, Cities

SQLFiddle 链接:http://www.sqlfiddle.com/#!3/d831d/57

为了达到最终的效果,我将解决方案分为两步:

  1. 获取按Person对数据进行分组的结果集和Priority并包含以逗号分隔的城市列表作为第三列

  2. 将结果集获取点 1 并执行相同的操作,但现在按列 Cities 进行分组(逗号分隔列表)和 Priority并生成一个以逗号分隔的相应人员列表。

在上面的查询中,第 1 步是以下查询:

select
Person,
Priority,
stuff ((
select ', ' + d2.City
from DummyTable d2
where d1.Priority = d2.Priority
and d1.Person = d2.Person
FOR XML PATH('')
), 1, 2, '') Cities
from DummyTable d1
group by Person, Priority

以下是 SQL 中的部分结果:http://www.sqlfiddle.com/#!3/d831d/58

然后我将第一个查询公开为 CTE ,使其可供(外部)查询 2 使用,该查询本质上执行相同的操作,但具有不同的分组标准。

关于两个组列的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com