gpt4 book ai didi

sql - 按列选择每个组中不同的项目

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

我有这个示例表

+--------+-------------+
| DBName | Description |
+--------+-------------+
| A | Car |
| A | Boat |
| B | Car |
| B | Plane |
| C | Car |
| C | Boat |
| C | Plane |
+--------+-------------+

我只想获取每个 DBName 上不存在的描述,并显示没有描述的 DBName。

我想要的查询结果

+--------+-------------+
| DBName | Description |
+--------+-------------+
| A | Plane |
| B | Boat |
+--------+-------------+

请记住,DBName 上不仅仅是 A、B、C。

最佳答案

有趣的问题。这里有几个解决方案。有围绕这些技术的讨论here ,以及处理此类场景的其他路线的一些建议。

<小时/>

SQL Fiddle Example

select DBName, Description
from (
select DBName, Description
from (select distinct DBName from demo) a
cross join (select distinct Description from demo) b
) c
except
select DbName, Description from demo

此解决方案的工作原理是获取每种可能的组合(通过每列的不同值的交叉联接),然后通过 except 子句排除所有已存在的组合。

<小时/>

SQL Fiddle Example

select [each].DBName, missing.Description
from (select distinct DBName from demo) [each]
cross join (select distinct Description from demo) [missing]
where not exists
(
select top 1 1
from demo [exists]
where [exists].DbName = [each].DBName
and [exists].Description = [missing].Description
)

此解决方案与上面的相同,只是我们使用 where not办法 来删除现有的组合,而不是 except 子句。

关于sql - 按列选择每个组中不同的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981276/

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