这是我的实际结果,我用于客户的商店详情
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
在此我需要根据成员资格no和使用sid检索细节。 sid是唯一的号码。 我需要将结果显示为
SID MEMBERSHIP_NO MEMBERSHIP_NAME MEMBERSHIP_LNAME
----- ------------- --------------- ----------------
20 101010 ALLEN WARD
30 101011 MARTIN BLAKE
以上3个属性是常量,使用该值仅客户端编号,名称插入表中。我坚持这个...我需要解决它。
这是我用于检索详细信息的查询。但它返回空
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;
答案 0 :(得分:0)
您可以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