Sql server 2008 如何在特定列上选择distinct
我在一个表中有几列 Col1,Col2,Col3,Col4 现在我想这样选择Sql server 2008 如何在特定列上选择distinct,sql-server-2008,distinct,Sql Server 2008,Distinct,我在一个表中有几列 Col1,Col2,Col3,Col4 现在我想这样选择 选择不同的(Col1、Col2、Col3)、Col4 i、 e.仅基于这三个列获取差异。只需按Col1、Col2、Col3进行分组,并使用聚合函数将其与col4进行聚合,如MAX、MIN等。。像这样: SELECT Col1, Col2, Col3, MAX(Col4) FROM TableName GROUP BY Col1, Col2, Col3 group by和distinct在SQL中执行几乎相似的功能:
选择不同的(Col1、Col2、Col3)、Col4
i、 e.仅基于这三个列获取差异。只需按Col1、Col2、Col3进行分组,并使用聚合函数将其与
col4
进行聚合,如MAX
、MIN
等。。像这样:
SELECT Col1, Col2, Col3, MAX(Col4)
FROM TableName
GROUP BY Col1, Col2, Col3
group by和distinct在SQL中执行几乎相似的功能: 因此,下面的两个查询几乎是等价的:
SELECT DISTINCT Col1, Col2, Col3 FROM tbl
SELECT Col1, Col2, Col3 FROM tbl GROUP BY Col1, Col2, Col3
从一个评论到另一个答案:
我能得到像这样的Col1,Col2,Col3和(Col4的定界符形式) 是的,您可以对xml路径使用
select Col1,
Col2,
Col3,
(
select ',' + T2.Col4
from YourTable T2
where T1.Col1 = T2.Col1 and
T1.Col2 = T2.Col2 and
T1.Col3 = T2.Col3
for xml path(''), type
).value('substring((./text())[1], 2)', 'varchar(max)') as Col4
from YourTable as T1
group by T1.Col1, T1.Col2, T1.Col3
关于Col4
你需要对其他3列的每个不同值进行聚合吗?你可以从这篇文章中得到帮助,这是一个varchar字段,我只希望有基于三列的不同记录。@Zerotoinfinite对于其他行的每个不同值,您想对其执行什么操作?col4是varchar,我无法对其进行任何聚合。但这是唯一的专栏。我想得到3列中唯一的一列,只需添加与之相关的第四列row@Zerotoinfinite您能给我看一些示例数据,以及在查询之后它应该是什么样子的吗?我能得到像这样的Col1、Col2、Col3和(Col4在定界符形式下)吗但是我想在结果中也包含Col4,为什么不编写一个内部查询,执行3列的distinct,而外部查询执行匹配行的inner3和Col4?
select Col1,
Col2,
Col3,
(
select ',' + T2.Col4
from YourTable T2
where T1.Col1 = T2.Col1 and
T1.Col2 = T2.Col2 and
T1.Col3 = T2.Col3
for xml path(''), type
).value('substring((./text())[1], 2)', 'varchar(max)') as Col4
from YourTable as T1
group by T1.Col1, T1.Col2, T1.Col3