在SQL中选择计数为1的列标题

时间:2018-07-24 15:20:24

标签: sql ssms

我正在尝试返回值计数为1的数据列的列标题。

我在下面附加了一些示例数据,并希望我的查询返回列标题,例如“ FinalCompare ”,而不是“ BeginCompare

我应该指出,在我的实际数据集中,我试图返回的不止一列。 (即会有更多“最终比较”列)

IFinal  | UFinal  | FinalCompare |     IBegin  | UBegin  | BeginCompare |
 NULL   | NULL    | Y            |      NULL   | 0       | N            |
 NULL   | NULL    | Y            |      NULL   | NULL    | Y            |
 NULL   | NULL    | Y            |      NULL   | NULL    | Y            |
 NULL   | NULL    | Y            |      NULL   | 1       | N            |
 NULL   | NULL    | Y            |      NULL   | NULL    | Y            |
 NULL   | NULL    | Y            |      NULL   | NULL    | Y            |
 NULL   | NULL    | Y            |      NULL   | NULL    | Y            |  

这是在SQL中执行此操作的简单方法吗?

1 个答案:

答案 0 :(得分:0)

有一种方法,但是您必须列出每一列。像这样:

select ( (case when min(FinalCompare) = max(FinalCompare) then 'FinalCompare;' else '' end) ||
         (case when min(BeginCompare) = max(BeginCompare) then 'BeginCompare;' else '' end)
       ) as columns_with_one_value
from t;

您需要将每一列列为单独的case表达式。请注意,这是对min()max()的比较,因为它们通常比count(distinct)便宜。