Sql 在不同的行中查找具有不同值的列?

Sql 在不同的行中查找具有不同值的列?,sql,postgresql,Sql,Postgresql,我的表中有450个字段/列和两行,我想找出哪些列在这些行中具有不同的值 假设我有下表: 部 角色1 角色2 DEF A. abc 呃 0 A. abc 呃 1. 取消PIVOT和分组是完成此任务的一种方法 下面是一个如何做到这一点的示例 create table t(dept varchar(10),role1 varchar(10),role2 varchar(10),DEF int) insert into t select 'a','abc','er',0 union all sele

我的表中有450个字段/列和两行,我想找出哪些列在这些行中具有不同的值

假设我有下表:

部 角色1 角色2 DEF A. abc 呃 0 A. abc 呃 1.
取消PIVOT和分组是完成此任务的一种方法

下面是一个如何做到这一点的示例

create table t(dept varchar(10),role1 varchar(10),role2 varchar(10),DEF int)

insert into t 
select 'a','abc','er',0 union all
select 'a','abc','er',1 

select col_name,string_agg(f,',')
from (
 select unnest(array[role1,role2,cast(DEF as varchar(10))]) f
        ,unnest(array['role1','role2','DEF']) as col_name
  from t
     )x
group by col_name
having count(distinct f)>1



+----------+------------+
| col_name | string_agg |
+----------+------------+
| DEF      |        0,1 |
+----------+------------+

db-fiddle link
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=f884b85657218982da90b50328883e66
您可以使用获取作为json对象的行并进行比较:

select key as column, array_agg(value) as values
from my_table t
cross join jsonb_each_text(to_jsonb(t))
group by key
having count(distinct value) > 1

 column | values
--------+--------
 def    | {0,1}
(1 row) 

请仅标记一个RDBMS。请告诉我们您的尝试。您能为我推荐psql的解决方案吗?尝试取消激励和分组的选项您能在这里举一个例子吗?请查看我的答案