【问题标题】:Select rows by condition without groupby in SQL?在SQL中按条件选择行而不按分组?
【发布时间】:2020-12-11 06:12:48
【问题描述】:

我有如下 SQL 表。

Type Code
1 11111
2 11111
1 22222
2 22222
1 33333
2 33333

并希望得到以下结果。

Type_1 Code_1 Type_2 Code_2
1 11111 2 11111
1 22222 2 22222
1 33333 2 33333

请帮忙。

【问题讨论】:

  • 具体是什么给您带来了麻烦?或者你只是想让别人为你做这件事?
  • 顺便说一句,请用您的 DBMS 实现标记您的问题 - 它有助于提供更相关的答案。

标签: sql


【解决方案1】:

你可以使用self join如下:

select t1.code, t1.type, t2.code, t2.type
  from your_Table t1 join your_Table t2
    on t1.code = t2.code
 where t1.type = 1 and t2.type = 2

我正在考虑 type 1 和 2 记录将始终存在于每个 code 的表中。如果不是,则使用FULL OUTER JOIN 仅具有JOIN 条件(来自WHERE 的条件应移至JOIN 条件)

【讨论】:

    【解决方案2】:

    您似乎想要执行自联接。 AKA,您想将表中的行连接到自身。

    这是一个使用示例数据的基本示例,该示例数据将返回您想要的内容,请记住,做事的方法总是不止一种,对于您计划复制和复制的任何地方,这种特殊方法可能不是最有效的使用它:

    SELECT s1.Type AS Type_1
        , s1.Code AS Code_1
        , s2.Type AS Type_2
        , s2.Code AS Code_2
    FROM Sample s1
        JOIN Sample s2 ON s2.Code = s1.Code AND s2.Type = 2
    WHERE s1.Type = 1;
    

    【讨论】:

    • 应该是WHERE s1.Type = 1;
    • @costaparas 很好,谢谢。在我的手机上输入了这个?
    • 另外,最好使用 AS 作为列别名 - 因为我们不知道 OP 使用的是什么 DBMS。
    • @costaparas 哦,这很奇怪,我什至没有注意到。我不关注sql 标签,我只关注sql-server 标签。我一定是从主提要中点击了这个。我会解决的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多