【问题标题】:How to select distinct on specific columns如何在特定列上选择不同的
【发布时间】:2023-03-02 22:43:01
【问题描述】:

我的表中有几列

Col1Col2Col3Col4

现在我想像这样选择

SELECT DISTINCT (Col1, Col2, Col3), Col4

即仅根据这三个列获得不同的值。

【问题讨论】:

标签: sql-server-2008 distinct


【解决方案1】:

只需 GROUP BY Col1, Col2, Col3col4 的聚合函数,如 MAXMIN 等......就像这样:

SELECT Col1, Col2, Col3, MAX(Col4)
FROM TableName
GROUP BY Col1, Col2, Col3

【讨论】:

  • 这是一个varchar字段,我只想根据三列有不同的记录。
  • @Zerotoinfinite col4 对于其他行的每个不同值,您想为它做什么?
  • Col4 是 varchar,我无法对此进行任何聚合。但那是独一无二的专栏。我想获得唯一的 3 列,只需添加与该行相关的第四列
  • @Zerotoinfinite 你能告诉我一些示例数据以及查询后的样子吗?
  • 我可以得到这样的 Col1, Col2 , Col3 和 (Col4 的分隔符形式)
【解决方案2】:

从评论到另一个答案:

我可以得到这样的 Col1, Col2 , Col3 和 (Col4 in delimiter form)

是的,您可以使用for xml path

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

SQL Fiddle

【讨论】:

    【解决方案3】:

    group by 和 distinct 在 SQL 中执行几乎相似的功能:

    所以下面的两个查询几乎是等价的:

    SELECT DISTINCT Col1, Col2, Col3 FROM tbl
    
    SELECT Col1, Col2, Col3 FROM tbl GROUP BY Col1, Col2, Col3
    

    【讨论】:

    • 但我想在结果集中也有 Col4
    • 你为什么不写一个内部查询做不同的 3 列,而外部查询采用内部 3 和 Col4 的匹配行?
    【解决方案4】:
    select distinct ( Convert(varchar(255),Col1) +' '+
    Convert(varchar(255),Col2)+' '+Convert(varchar(255),Col3)),
    Col4 from clients
    

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 2019-04-05
      相关资源
      最近更新 更多