【问题标题】:Filter out one column value depending on other column value根据另一列值过滤掉一列值
【发布时间】:2013-12-20 06:57:20
【问题描述】:

被一个问题困住了一段时间。我给你和下面的例子。

我有这张桌子

ID       | Dip  | Azi   |
SV12360  |-45   | 229.3 |
SV12360  |-45.1 | 228.3 |
SV12360  |-44.8 | 223.3 |
SV12359  |-39   | 249.3 |
SV12359  |-39.4 | 279.3 |
SV12357  |-55   | 290.3 |
SV12357  |-57   | 210.3 |
SV12318  |-47   | 212.3 |
SV12318  |-47.2 | 241.3 |
SV12317  |-41   | 289.3 |
SV12317  |-40   | 211.3 |
------------------------- etc.

我想创建一个只为每个 ID 提供第一个值的查询。例如,在这种情况下,我希望看到具有第一个 Dip 和 Azi 值的不同 ID。

ID        Dip   Azi
SV12360 | -45 | 229.3
SV12359 | -39 | 249.3
SV12357 | -55 | 290.3

等等。这些表包含大约 19000 行,我不想手动复制粘贴每个 ID 的值。

【问题讨论】:

  • row_number()over(partition by id order by DIP) as rownum then where rownum=1

标签: sql-server sql-server-2008-r2 unique distinct


【解决方案1】:
SELECT  t2.*
FROM    (
        SELECT  DISTINCT ID
        FROM    <yourTable>
        ) t1
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    <yourTable> t
        WHERE   t.ID = t1.id
        --ORDER BY <column> --you can specify which record is first            
        ) t2

【讨论】:

  • 完美运行!为什么我没有想到……谢谢!
【解决方案2】:
try below



WITH ABC AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY id ORDER BY ID)'rank' FROM TBL)

    SELECT * FROM ABC 
    WHERE rank= 1

select * from(
(SELECT *,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID)'rank'
             FROM TBL)
             )tmp where rank=1

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多