【问题标题】:SQL query has me stumpedSQL查询让我难过
【发布时间】:2018-11-02 20:31:12
【问题描述】:

这是我的情况:我有两个表,表 A 有列:

  ID,
  Name,
  ClassYear,
  Classmonth

ID 是主键,没有重复项。

表 b 有这些列:

    ID,
    addresstype
    addline1
    addline2
    country,
    city,
    state,
    zip

IDtable B 中并不是唯一的,但它是您链接回table A 的方式。

如果您有多个address,例如Home, school 那么您在table b 中的记录不止于此。

我的任务是从table A 中选择具有class year>= 2019 的每个人,以及具有class year = 2018 的每个人,只要class month>=5 即可

没问题。

现在让我感到困惑的是,我有来自table A 的人员列表,我需要查询table b,我只想提取同时拥有homeschool 地址类型和地址是相同的,例如line 1line 2countrycitystatezip 是相同的。

我将不胜感激。

【问题讨论】:

  • 你能发布到目前为止你尝试过的东西吗?这应该可以使用 JOIN 解决,然后使用 WHERE 对两个表进行一些限制,但是如果您发布您现在拥有的内容,将更容易弄清楚。
  • 欢迎来到 SO!请查看stackoverflow.com/help/mcve,了解如何通过最小、完整和可验证的示例提出问题。

标签: sql-server tsql select


【解决方案1】:

您可以按地址的详细信息分组并计算其具有的不同类型的数量:

SELECT *
FROM   table1
WHERE  id IN (SELECT   id
              FROM     table2
              WHERE    addresstype IN ('home', 'school')
              GROUP BY id, addline1, addline2, country, city, state, zip
              HAVING   COUNT(DISTINCT addresstype) = 2)

【讨论】:

  • @ZoharPeled eep,确实!感谢您的关注。已编辑和修复。
【解决方案2】:
SELECT
    DISTINCT
    student.ID
    , student.Name
    , student.ClassYear
    , student.ClassMonth
FROM
    TableA AS student
    INNER JOIN TableB AS homeAddress ON
        student.ID = homeAddress.ID
        AND homeAddress.addressType = 'Home'
    INNER JOIN TableB AS schoolAddress ON
        student.ID = schoolAddress.ID
        AND schoolAddress.addressType = 'School'
        AND homeAddress.line1 = schoolAddress.line1
        AND homeAddress.line2 = schoolAddress.line2
        AND homeAddress.country = schoolAddress.country
        AND homeAddress.city = schoolAddress.city
        AND homeAddress.state = schoolAddress.state
        AND homeAddress.zip = schoolAddress.zip
WHERE
    student.classYear >= 2019
    OR (student.ClassYear = 2018 AND student.classMonth >= 5)
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2011-03-28
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多