下面是表格结构。第一列包含的字符串可能会出现在多行中。我想以这样的方式编写查询: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,不依赖于数据库或其版本。