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)
您可以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
分配一个数字。1
ORDER BY
ROW_NUMBER
需要一个ORDER BY
子句。SELECT NULL
告诉 sql-server 我们不想强制执行特定的命令。我们只想要按分区编号的行。
显然,WHERE rn = 1
仅过滤 a 为 1 的行。ROW_NUMBER
这为每个可用行提供一行V_TYPE
。
归档时间: |
|
查看次数: |
1095 次 |
最近记录: |