Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在特定列上选择distinct_Sql Server 2008_Distinct - Fatal编程技术网

Sql server 2008 如何在特定列上选择distinct

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中执行几乎相似的功能:

我在一个表中有几列

Col1Col2Col3Col4

现在我想这样选择

选择不同的(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