【问题标题】:Get Common Column value for multiple rows [closed]获取多行的公共列值[关闭]
【发布时间】:2022-01-10 04:43:55
【问题描述】:
SELECT f1.FacNo, o1.CourseNo, f1.FacSupervisor 
from Faculty f1 
INNER JOIN Offering o1 on o1.FacNo = f1.FacNo AND o1.OffYear = 2017

是否可以编写一个查询来返回 FacNoFacSupervisor CourseNo 相同的行?

我希望这样做没有任何循环或排序。

【问题讨论】:

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 是的。编写查询,给出 facno 的计数和具有 count() > 1 的主管,然后在 facNo 和 facSupervisor 上加入您的基本集。
  • 请提供minimal reproducible example,包括样本数据、预期结果和您的尝试。
  • “我认为这个数据集应该足够了” - 你越清楚你的问题就越容易回答。
  • “为什么要投票”将鼠标悬停在向下箭头上,它会告诉你。

标签: sql sql-server tsql


【解决方案1】:

我并不完全清楚你在问什么,但这可能会让你接近:

--original query
SELECT f1.FacNo, o1.CourseNo, f1.FacSupervisor 
FROM Faculty f1 
INNER JOIN Offering o1 on o1.FacNo = f1.FacNo AND o1.OffYear = 2017
 -- further narrow results for offerings with a supervisor matching the faculty member
INNER JOIN Offering o2 ON o2.FacNo = f1.FacSupervisor 
    -- for the same year and course
    AND o2.OffYear = o1.OffYear AND o2.CoursNo = o1.CourseNo

【讨论】:

    【解决方案2】:

    使用公用表表达式来获取每个 > 1 的计数。然后加入回基集。我会让你处理加入回来提供...

    WITH CTE AS (
        SELECT FacNo, FacSupervisor
        FROM Faculty
        GROUP BY FacNo, FacSupervisor
        HAVING Count(*) > 1
    )    
    SELECT F.* 
    FROM CTE C
    INNER JOIN Faculty F
        ON F.FacNo = C.FacNo
        AND F.FacSupervisor = C.FacSupervisor
    

    【讨论】:

      【解决方案3】:

      由于缺少用于创建测试数据的 DDL 而未经测试

      SELECT  *
      FROM    (
                  SELECT  f1.FacNo, 
                          o1.CourseNo, 
                          f1.FacSupervisor,
                          ROW_NUMBER() OVER (PARTITION BY f1.FacNo, o1.CourseNo, f1.FacSupervisor) AS RowN
                  FROM    Faculty f1 
                          INNER JOIN Offering o1 
                              on o1.FacNo = f1.FacNo AND o1.OffYear = 2017
              ) a
      WHERE RowN > 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-27
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        相关资源
        最近更新 更多