我需要检索具有不同值的数据列
对于Ex:
Location FoodType Gender Alive
India Veg M Y
India NonVeg M N
我需要一个查询来列出具有不同值的数据行 预期产出是:
FoodType Alive
Veg Y
NonVeg N
不同和唯一可能无效,因为我不知道哪个列会有不同的值。
答案 0 :(得分:1)
如果您需要列表,则可以使用unpivot
,计算不同的值,并可选地将它们与listagg()
一起聚合:
with t(Location, FoodType, Gender, Alive) as (
select 'India', 'Veg', 'M', 'Y' from dual union all
select 'India', 'NonVeg', 'M', 'N' from dual )
-- end of test data, the exact query starts here:
select col, listagg(val, ', ') within group (order by val) list
from (
select col, val, count(distinct val) over (partition by col) cnt
from t
unpivot (val for col in (Location, FoodType, Gender, Alive)))
where cnt > 1
group by col
我们有:
COL LIST
-------- -------------
ALIVE N, Y
FOODTYPE NonVeg, Veg
如果您坚持在单独的列中输出您需要动态SQL再次生成到pivot
数据的非不同列的列表。
如果表格中有空值且非空,并且您想要显示此类对,请使用include nulls
和nvl()
进行展开。
答案 1 :(得分:0)
评论太长了。
SQL查询具有一组固定的列。您不能指定具有变量编号的查询 - 尽管您可以使用动态SQL执行此操作。
您可以在列中获取不同值的列表:
select count(distinct Location),
count(distinct FoodType),
count(distinct Gender),
count(distinct Alive)
from t;
但是,这并不会返回列中的值。