代码之家  ›  专栏  ›  技术社区  ›  Avi

SQL Server查询以显示所有列,但其中一列具有不同的值(不分组任何内容)

  •  5
  • Avi  · 技术社区  · 10 年前

    我有一张有106列的表。其中一列是16种类型的“类型”列。

    我想要16行,其中类型不同。因此,第1行的类型是“施工”,第2行的类型为“电梯PVT”,等等。

    使用Navicat。

    从目前为止我发现(并理解)的情况来看,我不能使用Distinct(因为它看起来跨越所有行),也不能使用Group By(因为这是用于聚合数据的,我不想这样做),所以我陷入了困境。

    请温柔点,我真的很新。

    下面是表格的一部分(我如何正常分享?)-它真的很大,所以我没有分享整个事情。下面是我要查找的部分结果,其中Violation_Type是唯一的,其余列显示。

    明白了……明白了…(把我带走了一辈子,但明白了…)

      D_ID   B_ID   V_ID       V_Type      S_ID   c_f   d_y    l_u    p_s   du_p  
     ------ ------ ------- -------------- ------ ----- ------ ------ ----- ------ 
       184    117   V 032   Elevator PVT      2     8      0      0               
         4    140   V 100   Construction      1     8      0      0               
        10    116   V 122   Electric                1      8   2005     0      0  
        11    117   V 033   Boiler Local      1     0   2005      0     0       
    
    1 回复  |  直到 10 年前
        1
  •  3
  •   Felix Pamittan    10 年前

    您可以使用 ROW_NUMBER 为此:

    SELECT *
    FROM(
        SELECT *,
            rn = ROW_NUMBER() OVER(PARTITION BY V_Type ORDER BY (SELECT NULL))
        FROM tbl
    )t
    WHERE rn = 1
    

    修改 ORDER BY 这取决于您要优先排序的行。


    根据文档:

    返回结果分区内的行的序号 设置,每个分区的第一行从1开始。

    这意味着对于分区中的每一行(由 PARTITION BY 子句),sqlserver从 1 取决于 订购者 条款

    行_编号 需要 订购者 条款 SELECT NULL 告诉sqlserver我们不想强制执行特定的顺序。我们只需要按分区对行进行编号。

    这个 WHERE rn = 1 显然,只过滤具有 行_编号 共1行。这将为每个 V_TYPE 可获得的