我有一个产生几个结果的查询。我已将几列连接为 1 作为 ID。我只想显示 ID 唯一的行。
下图是我的表格的示例:
如您所见,ID 重复了几次。如何构建查询以仅显示 3 个唯一行?
嵌套此查询并使用distinct(RowID)
显示三行但我无法显示其余列?
欢迎任何想法。谢谢!
我有一个产生几个结果的查询。我已将几列连接为 1 作为 ID。我只想显示 ID 唯一的行。
下图是我的表格的示例:
如您所见,ID 重复了几次。如何构建查询以仅显示 3 个唯一行?
嵌套此查询并使用distinct(RowID)
显示三行但我无法显示其余列?
欢迎任何想法。谢谢!
在所有列的选择中使用 distinct
询问:
select distinct RowID, OrderNum, cDescription, Thickness, UllTimberThickness, Width, UllTimberWidth, Length
from YourTable
使用GROUP BY
:
SELECT RowID, OrderNum, cDescription, Thickness, etcetera ...
FROM dbo.TableName
GROUP BY RowID, OrderNum, cDescription, Thickness, etcetera ...
( etcetera 是其余列的占位符)
尝试这个:
SELECT *
FROM mytable t1
WHERE
(SELECT COUNT(*) FROM mytable t2
where t2.id = t1.id) = 1
通过这种方式,您可以获得 id 唯一的所有行。我写这个查询是因为我不知道你 ID 的其他字段是否相同,因为你已经用一组信息构建了你的字段。如果所有列对于相同的 id 都是相同的,那么您可以使用 Vasanth Sundaralingam 在他的帖子中建议您的语句 DISTINCT。
我对“获得三个唯一行的含义”有点困惑。
如果您的意思是唯一的行,请count(*)
用作窗口函数:
select *
from (select t.*,
count(*) over (partition by id) as cnt
from t
) t
where cnt = 1;
如果您的意思是每一行的一个示例,请使用row_number()
:
select *
from (select t.*,
row_number(*) over (partition by id order by (select NULL)) as seqnum
from t
) t
where seqnum = 1;