下面是表格结构。第一列包含的字符串可能会出现在多行中。我想以这样的方式编写查询:column1值仅重复一次,以使column2包含A的行优先。如果只有B可用,则输出相同。同样,与此相关的column3也需要打印。如果在Column1和Column2中有多个具有相同值的行,则选择任意行(例如:下面的第2行和第3行)。

下面提供了示例数据和预期的sql输出。

表结构(这里也跳过其他列)

Column1 Column2 Column3
 123       A       1
 234       A       1
 234       A       4
 234       B       2
 435       A       2
 536       B       1


SQL预期输出

Column1 Column2 Column3
 123       A      1
 234       A      1
 435       A      2
 536       B      1


注意:这是此问题的扩展Distinct sql based on condition

最佳答案

您可以尝试以下方法:

SELECT   tab.Column1,
         tab.Column2,
         MIN(tab.Column3)
FROM     (SELECT Column1,
                 MIN(Column2) as min_column2
          FROM   tab
          GROUP BY Column1
         ) t
JOIN     tab
  ON     tab.Column1 = t.Column1
 AND     tab.Column2 = t.min_column2
GROUP BY tab.Column1,
         tab.Column2;


它是普通的ANSI-SQL,不依赖于数据库或其版本。

07-28 02:47
查看更多