【问题标题】:How to select various items for each Distinct code value如何为每个不同的代码值选择各种项目
【发布时间】:2018-04-06 17:08:09
【问题描述】:

目前,我正在 excel 中执行此过程,但需要很长时间,我认为 SQL 可能会提供更有效的替代方案。

投影表有 58k 行,最初以一种荒谬的方式排序。有 18 列,但只有两列有意义,occ_code 和 indcode。在 excel 中,我按 occ_code 升序排列,然后按 indcode 升序排列该子集。下面给出了预期结果的示例。

indcode     occ_code
000000       000000
110000       000000
111000       000000
000000       111011
110000       111011
120000       111011
000000       122011

至于SQL,可以用下面的代码来完成吗?

Select Distinct Occ_code,indcode From dbo.projections
Order by occ_code asc, indcode asc

【问题讨论】:

    标签: sql-order-by ssms distinct


    【解决方案1】:

    您的代码将起作用:

    Select Distinct Occ_code,indcode From dbo.projections Order by occ_code asc, indcode asc

    另一种方法是使用 group by 这将允许您使用聚合函数:

    Select Occ_code, indcode From dbo.projections group by Occ_code, indcode Order by occ_code asc, indcode asc

    在这里你可以使用 count(*) 来查找那些没有重复的组合代码:

    Select Occ_code, indcode, count(*) From dbo.projections group by Occ_code, indcode having count(*) = 1 Order by occ_code asc, indcode asc

    【讨论】:

    • 你能想到第二行代码结果的行数是20523而不是58K的原因吗?
    • @Calflamesfann 使用 count() 检查重复项,并按 count() 降序排序以查看是否有重复项。
    【解决方案2】:

    如果您希望在结果中包含 indcode,还必须在您的选择中包含它。您编写的查询只会为每个不同的 occ_code 值提供一行。

    【讨论】:

    • 是的 - 你现在会得到这两列的不同对,按 occ_code 排序,然后是 indcode
    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2016-09-24
    • 2018-12-09
    相关资源
    最近更新 更多