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

Avi*_*Avi 5 sql-server group-by distinct distinct-values

我有一个有 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       
Run Code Online (Sandbox Code Playgroud)

Fel*_*tan 3

您可以ROW_NUMBER为此使用:

SELECT *
FROM(
    SELECT *,
        rn = ROW_NUMBER() OVER(PARTITION BY V_Type ORDER BY (SELECT NULL))
    FROM tbl
)t
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)

ORDER BY根据您想要优先考虑的行进行修改。


从文档中:

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

这意味着对于分区中的每一行(由子句指定),sql-server根据子句中指定的顺序PARTITION BY分配一个数字。1ORDER BY

ROW_NUMBER需要一个ORDER BY子句。SELECT NULL告诉 sql-server 我们不想强制执行特定的命令。我们只想要按分区编号的行。

显然,WHERE rn = 1仅过滤 a 为 1 的行。ROW_NUMBER这为每个可用行提供一行V_TYPE