I found this problem on ORACLE board.
2 input TABLES:
Items
Id ItemName
1 Phone
2 Table
3 Lamp
4 TV
5 Stereo
ItemsByRooms
Id Room RoomItems
1 Bedroom Phone, Lamp, Bed, TV
2 Kitchen Phone, Table
3 LvRoom Phone, Lamp, TV, Stereo
Expected result:
Results would be:
Id ItemName QtyUsed
1 Phone 3
2 Table 1
3 Lamp 2
4 TV 2
5 Stereo 1
This Problem wasn't resolved by ORACLE board members.
Here is my solution:
WITH T1 (Id,Room,RoomItems) AS
(VALUES(1, 'Bedroom', 'Phone, Lamp, Bed, TV'),
(2, 'Kitchen', 'Phone, Table'),
(3, 'LvRoom', 'Phone, Lamp, TV, Stereo')),
T2(Id, ItemName) AS
(VALUES(1, 'Phone'),
(2, 'Table'),
(3, 'Lamp'),
(4, 'TV'),
(5, 'Stereo'))
SELECT CHAR(T2.ID)|| ' '||ITEMNAME "ID ITEM_NAME" ,count(*) AS
QTY_USED
FROM T1,T2
WHERE (LENGTH(STRIP(RoomItems)) - LENGTH(REPLACE(STRIP(RoomItems),
ITEMNAME,''))) > 0
GROUP BY CHAR(T2.ID)|| ' '||ITEMNAME;
ID ITEM_NAME QTY_USED
------------------- -----------
1 Phone 3
2 Table 1
3 Lamp 2
4 TV 2
5 Stereo 1
5 record(s) selected.
Is there is another solutions?
For example using Recursion.
Thank's in advance Leny G.
--
Message posted via DBMonster.com
http://www.dbmonster.com/Uwe/Forums.aspx/ibm-db2/200806/1


|