在单行中获取多个列值
Getting multiple column values in single row
这是我的实际结果,我已将其用于客户的商店详细信息
SID ATTRIBUTE_VALUES ATTRIBUTE_ID
---------- ---------------- -----------
20 101010 MEMBERSHIP_NO
20 ALLEN MEMBERSHIP_NAME
20 WARD MEMBERSHIP_LNAME
30 101011 MEMBERSHIP_NO
30 MARTIN MEMBERSHIP_NAME
30 BLAKE MEMBERSHIP_LNAME
在此,我需要根据成员编号并使用 sid 检索详细信息。 sid 是唯一编号。
我需要将结果显示为
SID MEMBERSHIP_NO MEMBERSHIP_NAME MEMBERSHIP_LNAME
----- ------------- --------------- ----------------
20 101010 ALLEN WARD
30 101011 MARTIN BLAKE
以上3个属性是常量,只取客户编号,名称插入table。我坚持这个......我需要解决它。
这是我用来检索详细信息的查询。但是它returns空
SELECT sid, LISTAGG(attribute_value, ',') WITHIN GROUP
(ORDER BY attribute_value) AS att FROM customer_attributes WHERE
sid ='20' AND attribute_value='101010'
AND attribute_id ='MEMBERSHIP_NO'
AND attribute_id ='MEMBERSHIP_NAME'
AND attribute_id ='MEMBERSHIP_LNAME'
GROUP BY SID;
您可以通过 join
完成此操作。 LISTAGG
不会创建 3 列:
select
a.sid,
a.ATTRIBUTE_VALUES MEMBERSHIP_NO,
b.ATTRIBUTE_VALUES MEMBERSHIP_NAME,
c.ATTRIBUTE_VALUES MEMBERSHIP_LNAME
from tbl a
join tbl b on a.sid = b.sid
join tbl c on c.sid = b.sid
where a.ATTRIBUTE_ID = 'MEMBERSHIP_NO'
and b.ATTRIBUTE_ID = 'MEMBERSHIP_NAME'
and c.ATTRIBUTE_ID = 'MEMBERSHIP_LNAME'
演示 sqlfiddle
这也给出了相同的结果;
select
sid,
Max(DECODE(ATTRIBUTE_ID, 'MEMBERSHIP_NO', ATTRIBUTE_VALUES, '')) MEMBERSHIP_NO,
Max(DECODE(ATTRIBUTE_ID, 'MEMBERSHIP_NAME', ATTRIBUTE_VALUES, '')) MEMBERSHIP_NAME,
Max(DECODE(ATTRIBUTE_ID, 'MEMBERSHIP_LNAME', ATTRIBUTE_VALUES, '')) MEMBERSHIP_LNAME
from tbl
group by sid
order by sid
同样可以通过Pivot也
来完成
select *
from tbl
pivot(
max(ATTRIBUTE_VALUES) for ATTRIBUTE_ID in (
'MEMBERSHIP_NO' MEMBERSHIP_NO,
'MEMBERSHIP_NAME' MEMBERSHIP_NAME,
'MEMBERSHIP_LNAME' MEMBERSHIP_LNAME
)
)
order by sid
这是我的实际结果,我已将其用于客户的商店详细信息
SID ATTRIBUTE_VALUES ATTRIBUTE_ID
---------- ---------------- -----------
20 101010 MEMBERSHIP_NO
20 ALLEN MEMBERSHIP_NAME
20 WARD MEMBERSHIP_LNAME
30 101011 MEMBERSHIP_NO
30 MARTIN MEMBERSHIP_NAME
30 BLAKE MEMBERSHIP_LNAME
在此,我需要根据成员编号并使用 sid 检索详细信息。 sid 是唯一编号。 我需要将结果显示为
SID MEMBERSHIP_NO MEMBERSHIP_NAME MEMBERSHIP_LNAME
----- ------------- --------------- ----------------
20 101010 ALLEN WARD
30 101011 MARTIN BLAKE
以上3个属性是常量,只取客户编号,名称插入table。我坚持这个......我需要解决它。
这是我用来检索详细信息的查询。但是它returns空
SELECT sid, LISTAGG(attribute_value, ',') WITHIN GROUP
(ORDER BY attribute_value) AS att FROM customer_attributes WHERE
sid ='20' AND attribute_value='101010'
AND attribute_id ='MEMBERSHIP_NO'
AND attribute_id ='MEMBERSHIP_NAME'
AND attribute_id ='MEMBERSHIP_LNAME'
GROUP BY SID;
您可以通过 join
完成此操作。 LISTAGG
不会创建 3 列:
select
a.sid,
a.ATTRIBUTE_VALUES MEMBERSHIP_NO,
b.ATTRIBUTE_VALUES MEMBERSHIP_NAME,
c.ATTRIBUTE_VALUES MEMBERSHIP_LNAME
from tbl a
join tbl b on a.sid = b.sid
join tbl c on c.sid = b.sid
where a.ATTRIBUTE_ID = 'MEMBERSHIP_NO'
and b.ATTRIBUTE_ID = 'MEMBERSHIP_NAME'
and c.ATTRIBUTE_ID = 'MEMBERSHIP_LNAME'
演示 sqlfiddle
这也给出了相同的结果;
select
sid,
Max(DECODE(ATTRIBUTE_ID, 'MEMBERSHIP_NO', ATTRIBUTE_VALUES, '')) MEMBERSHIP_NO,
Max(DECODE(ATTRIBUTE_ID, 'MEMBERSHIP_NAME', ATTRIBUTE_VALUES, '')) MEMBERSHIP_NAME,
Max(DECODE(ATTRIBUTE_ID, 'MEMBERSHIP_LNAME', ATTRIBUTE_VALUES, '')) MEMBERSHIP_LNAME
from tbl
group by sid
order by sid
同样可以通过Pivot也
来完成select *
from tbl
pivot(
max(ATTRIBUTE_VALUES) for ATTRIBUTE_ID in (
'MEMBERSHIP_NO' MEMBERSHIP_NO,
'MEMBERSHIP_NAME' MEMBERSHIP_NAME,
'MEMBERSHIP_LNAME' MEMBERSHIP_LNAME
)
)
order by sid