【问题标题】:SQL query to find matching groups of records between two tables用于查找两个表之间的匹配记录组的 SQL 查询
【发布时间】:2020-08-15 16:11:20
【问题描述】:

假设我有两张桌子:


Table "Shares":

+---------+
| share 1 |
+---------+
| share 2 |
+---------+

And table "Valuations"

+-------------+---------+
| valuation 1 | Share 1 |
+-------------+---------+
| valuation 1 | Share 2 |
+-------------+---------+
| valuation 2 | Share 1 |
+-------------+---------+
| valuation 3 | Share 1 |
+-------------+---------+
| valuation 3 | Share 2 |
+-------------+---------+

我想知道是否有一个 SQL Server (T-SQL) 查询从“Shares”表开始并仅返回包含“share”记录(“Share 1”和“Share 2”)的那些估值") - 两个表之间的内部连接也会在结果集中返回“值 2”,这不是我想要的。

任何帮助将不胜感激,

谢谢

【问题讨论】:

  • 只是一个比我更有知识的人的确认,INTERSECT 会给我想要的结果吗?
  • 使用GROUP BYCOUNT DISTINCT

标签: sql-server


【解决方案1】:

假设sharesvaluations中的列名是share,可以按估值分组并在having子句中设置条件:

select valuation
from valuations
group by valuation
having count(distinct share) = (select count(*) from shares)

如果您想要评估中的所有行:

select * from valuations
where valuation in (
  select valuation
  from valuations
  group by valuation
  having count(distinct share) = (select count(*) from shares)
)

请参阅demo

【讨论】:

  • 问题是,我需要估值而不是股票,即结果表应该是四行,两行用于估值 1,两行用于估值 3
  • 这样可以解决问题吗? select v.valuationic from #shares s inner join #valuations v on v.shareic = s.shareic group by v.valuationIC with count() = (select count() from #shares)
猜你喜欢
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 2015-05-23
相关资源
最近更新 更多