Return and combine multiple rows in one record
Hi friends,
I have these cursors,
DECLARE
CURSOR plaintif_cur IS
SELECT personel_id, sp_sfs_id
FROM siv_plaintif
WHERE SP_SFS_ID IN(70, 74, 182)
ORDER BY personel_id;
-- defendan cursor all defendan for a dept number
CURSOR defendan_cur (v_sp_sfs_id siv_plaintif.SP_SFS_ID%TYPE) IS
SELECT personel_id, sd_sfs_id
FROM siv_defendan
WHERE sd_sfs_id = v_sp_sfs_id
AND SD_SFS_ID IN(70, 74, 182);
BEGIN
FOR plaintif_rec IN plaintif_cur LOOP
dbms_output.put_line('Plaintif in Sivil '||TO_CHAR(plaintif_rec.sp_sfs_id));
FOR defendan_rec in defendan_cur(plaintif_rec.sp_sfs_id) LOOP
dbms_output.put_line('...plaintif is '||plaintif_rec.personel_id);
END LOOP;
END LOOP;
END;
The output generated was
Output:
Plaintif in Sivil 182
...plaintif is 38
Plaintif in Sivil 70
...plaintif is 1257
Plaintif in Sivil 74
...plaintif is 1277
Plaintif in Sivil 74
...plaintif is 1278
However, I want the output to be like this, especially for the record where there are many plaintifs in one Sivil file
Desired Output:
Plaintif in Sivil 182
...plaintif is 38
Plaintif in Sivil 70
...plaintif is 1257
Plaintif in Sivil 74
...plaintif is 1277, 1278
I would like to thank those everyone helping.. Thank you.
Instead of declaring two cursors and doing it in slowest possible manner, possibly you can combine it into one SQL. Search for string aggregation to get some queries in this regard.
For more specific answer, please post your table structure (CREATE TABLE) and sample data (INSERT statement) with sample output desired. Format your code with tag.
Similar Messages
-
Need help with a SQL qurey that returns multiple rows for one record?
I have the following query where I use a CASE WHEN clause to determine the date of a shift that begins with "FRLO" on day1 - day14 of the pay period. It works great if a schedule record contains one day that begins "FRLO", but if more than one day is "FRLO" then it only returns the first day it finds and not the others. Is there some way to get the query to return a ron for every day 1 - 14 that begins "FRLO"? System if Oracle 11G
Order of the results is not important as this is part of a larger query that orders the results.
Thanks in advance for any help,
George
SELECT s.empid,
CASE
WHEN UPPER (SUBSTR (s.Day1, 0, 4)) = 'FRLO'
THEN
pp.startpp
WHEN UPPER (SUBSTR (s.Day2, 0, 4)) = 'FRLO'
THEN
pp.startpp + 1
WHEN UPPER (SUBSTR (s.Day3, 0, 4)) = 'FRLO'
THEN
pp.startpp + 2
WHEN UPPER (SUBSTR (s.Day4, 0, 4)) = 'FRLO'
THEN
pp.startpp + 3
WHEN UPPER (SUBSTR (s.Day5, 0, 4)) = 'FRLO'
THEN
pp.startpp + 4
WHEN UPPER (SUBSTR (s.Day6, 0, 4)) = 'FRLO'
THEN
pp.startpp + 5
WHEN UPPER (SUBSTR (s.Day7, 0, 4)) = 'FRLO'
THEN
pp.startpp + 6
WHEN UPPER (SUBSTR (s.Day8, 0, 4)) = 'FRLO'
THEN
pp.startpp + 7
WHEN UPPER (SUBSTR (s.Day9, 0, 4)) = 'FRLO'
THEN
pp.startpp + 8
WHEN UPPER (SUBSTR (s.Day10, 0, 4)) = 'FRLO'
THEN
pp.startpp + 9
WHEN UPPER (SUBSTR (s.Day11, 0, 4)) = 'FRLO'
THEN
pp.startpp + 10
WHEN UPPER (SUBSTR (s.Day12, 0, 4)) = 'FRLO'
THEN
pp.startpp + 11
WHEN UPPER (SUBSTR (s.Day13, 0, 4)) = 'FRLO'
THEN
pp.startpp + 12
WHEN UPPER (SUBSTR (s.Day14, 0, 4)) = 'FRLO'
THEN
pp.startpp + 13
END
startdate,
NULL starttime,
NULL endtime,
8 hours,
0 minutes
FROM schedules s
JOIN
payperiods pp
ON pp.periodid = s.periodid
WHERE UPPER (SUBSTR (s.Day1, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day2, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day3, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day4, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day5, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day6, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day7, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day8, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day9, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day10, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day11, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day12, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day13, 0, 4)) = 'FRLO'
OR UPPER (SUBSTR (s.Day14, 0, 4)) = 'FRLO';
CURRENT OUTPUT
EMPID STARTDATE STARTTIME ENDTIME HOURS MINUTES
753738, 3/25/2013 , , ,8 ,0
753740, 3/25/2013 , , ,8 ,0
753748, 3/25/2013 , , ,8 ,0
DESIRED OUTPUT
EMPID STARTDATE STARTTIME ENDTIME HOURS MINUTES
753738, 3/25/2013 , , ,8 ,0
753740, 3/25/2013 , , ,8 ,0
753748, 3/25/2013 , , ,8 ,0
753738, 3/26/2013 , , ,8 ,0
753740, 3/26/2013 , , ,8 ,0
753740, 3/28/2013 , , ,8 ,0
753748, 1/1/2013 , , ,8 ,0
753738, 4/3/2013 , , ,8 ,0
753748, 4/3/2013 , , ,8 ,0
CREATE TABLE SCHEDULES
SCHEDULEID NUMBER(12) NOT NULL,
EMPID NUMBER(12) NOT NULL,
PERIODID VARCHAR2(6 BYTE) NOT NULL,
AREAID NUMBER(12) NOT NULL,
DAY1 VARCHAR2(50 BYTE),
DAY2 VARCHAR2(50 BYTE),
DAY3 VARCHAR2(50 BYTE),
DAY4 VARCHAR2(50 BYTE),
DAY5 VARCHAR2(50 BYTE),
DAY6 VARCHAR2(50 BYTE),
DAY7 VARCHAR2(50 BYTE),
DAY8 VARCHAR2(50 BYTE),
DAY9 VARCHAR2(50 BYTE),
DAY10 VARCHAR2(50 BYTE),
DAY11 VARCHAR2(50 BYTE),
DAY12 VARCHAR2(50 BYTE),
DAY13 VARCHAR2(50 BYTE),
DAY14 VARCHAR2(50 BYTE),
NOPTIND1 INTEGER DEFAULT 0,
NOPTIND2 INTEGER DEFAULT 0,
NOPTIND3 INTEGER DEFAULT 0,
NOPTIND4 INTEGER DEFAULT 0,
NOPTIND5 INTEGER DEFAULT 0,
NOPTIND6 INTEGER DEFAULT 0,
NOPTIND7 INTEGER DEFAULT 0,
NOPTIND8 INTEGER DEFAULT 0,
NOPTIND9 INTEGER DEFAULT 0,
NOPTIND10 INTEGER DEFAULT 0,
NOPTIND11 INTEGER DEFAULT 0,
NOPTIND12 INTEGER DEFAULT 0,
NOPTIND13 INTEGER DEFAULT 0,
NOPTIND14 INTEGER DEFAULT 0
CREATE TABLE PAYPERIODS
PERIODID VARCHAR2(6 BYTE) NOT NULL,
STARTPP DATE,
ENDPP DATE
Insert into SCHEDULES
(SCHEDULEID, EMPID, PERIODID, AREAID, DAY1,
DAY2, DAY3, DAY4, DAY5, DAY6,
DAY7, DAY8, DAY9, DAY10, DAY11,
DAY12, DAY13, DAY14, NOPTIND1, NOPTIND2,
NOPTIND3, NOPTIND4, NOPTIND5, NOPTIND6, NOPTIND7,
NOPTIND8, NOPTIND9, NOPTIND10, NOPTIND11, NOPTIND12,
NOPTIND13, NOPTIND14)
Values
(3693744, 753738, '082013', 2167, 'X',
'FRLO<1530>', 'FRLO<1530>', '1530', '1530', '1530',
'X', 'X', '1530', '1530', 'FRLO',
'1530', '1530', 'X', 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0);
Insert into SCHEDULES
(SCHEDULEID, EMPID, PERIODID, AREAID, DAY1,
DAY2, DAY3, DAY4, DAY5, DAY6,
DAY7, DAY8, DAY9, DAY10, DAY11,
DAY12, DAY13, DAY14, NOPTIND1, NOPTIND2,
NOPTIND3, NOPTIND4, NOPTIND5, NOPTIND6, NOPTIND7,
NOPTIND8, NOPTIND9, NOPTIND10, NOPTIND11, NOPTIND12,
NOPTIND13, NOPTIND14)
Values
(3693745, 753740, '082013', 2167, 'X',
'FRLO<1530>', 'FRLO<1530>', '1530', 'FRLO', '1530',
'X', 'X', '1530', '1530', '1530',
'1530', '1530', 'X', 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0);
Insert into SCHEDULES
(SCHEDULEID, EMPID, PERIODID, AREAID, DAY1,
DAY2, DAY3, DAY4, DAY5, DAY6,
DAY7, DAY8, DAY9, DAY10, DAY11,
DAY12, DAY13, DAY14, NOPTIND1, NOPTIND2,
NOPTIND3, NOPTIND4, NOPTIND5, NOPTIND6, NOPTIND7,
NOPTIND8, NOPTIND9, NOPTIND10, NOPTIND11, NOPTIND12,
NOPTIND13, NOPTIND14)
Values
(3693746, 753748, '082013', 2167, 'X',
'FRLO<1530>', '1530', '1530', '1530', '1530',
'X', 'X', 'FRLO<1530>', '1530', 'FRLO',
'1530', '1530', 'X', 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0);
COMMIT;
Insert into PAYPERIODS
(PERIODID, STARTPP)
Values
('082013', TO_DATE('03/24/2013 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;Do you have the opportunity to change the data model to have one day per row ? It would make this easier to get this result without the need for a 14-way CASE or UNION.
If not...
The case statement will return as soon as it matches one of the conditions. Since you want a match when any column in the row starts with FRLO you can use a UNION ALL treating each column as a separate result. There may be more efficient ways to do this, but here is one way:
Select S.Empid, Pp.Startpp Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day1, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+1 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day2, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+2 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day3, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+3 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day4, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+4 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day5, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+5 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day6, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+6 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day7, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+7 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day8, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+8 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day9, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+9 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day10, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+10 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day11, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+11 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day12, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+12 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day13, 0, 4)) = 'FRLO'
Union All
Select S.Empid, Pp.Startpp+13 Startdate, Null Starttime, Null Endtime, 8 Hours, 0 Minutes
From Schedules S Join Payperiods Pp On Pp.Periodid = S.Periodid
Where Upper (Substr (S.Day14, 0, 4)) = 'FRLO'
; -
Combining multiple rows into one row
Hi all.
My most humble apology for this question but solutions in previous threads did not seem to help much.
Apparently, my account has not been verified and I am currently at home with no access to the SQL code so i can't post the actual code.
We have this (mockup) of code
Select S.C1, AViewSS.Study, AViewSS.SlotName, IST.TakenByDate, IST.ScannedByTime, SE.TimepointCalculation
From IST
INNER JOIN
AViewSS ON IST.GroupID = AViewSS.GroupID and
IST.SlotID = AViewSS.SlotID
INNER JOIN
S ON AViewSS.StudyID = S.StudyID
INNER JOIN
SE ON IST.Line = SE.Line and IST.SubLine = SE.SubLine and
AViewSS.ScheduleID = SE.ScheduleID
WHERE
(IST.GroupID = 92) and (IST.SlotID between 1791 and 1795)
and (AViewSS.VisitID = 137)
The query currently returns this result set
Col 1 Col 2 Taken Date Date 1 Date 2 Date 3
Scanned DateTime
Data Data 3/12/2015 3/12/2015 7:22
3/12/2015 7:22
Data Data 3/12/2015 3/12/2015 8:47
3/12/2015 8:47
Data Data 3/12/2015
3/12/2015 9:27 3/12/2015 9:27
Data Data 3/22/2015 3/22/2015 7:27
3/22/2015 7:27
Data Data 3/22/2015
Data Data 4/12/2015
Data Data 4/12/2015
Data Data 4/12/2015
You’ll notice that rows 1, 2, 3 are related as are rows 4, 5 and rows 6, 7, 8.
This is what we ultimately want to see given the results above.
In the report, rows 1, 2, 3 from the results should roll into one row with the ScannedByTimeStamp from each row returned by the query populating the appropriate report time column based on the value of a column in the row.
Col 1 Col 2 Taken Date Date 1 Date 2
Date 3
Data Data 3/12/2015 3/12/2015 7:22 3/12/2015 8:47 3/12/2015 9:27
Data Data 3/22/2015 3/22/2015 7:27
Data Data 4/12/2015
We would appreciate any guidance.Hi Duane,
The table and matrix data regions can display complex data relationships by including nested tables,matrices, lists, charts and gauges. Tables and matrices have a tabular layout and their data comes from a single dataset, built on a single data source. The
key diference between tables and matrices is that tables can include only row groups, where as matrices have row groups and columns groups.
All Code in this sample are downloadable from
this URL
create procedure spMultiple
as
begin
declare @Mytable table ([Col 1] varchar(20),[Col 2] varchar(20),[Taken Date] varchar(20),[Date 1] varchar(20),[Date 2] varchar(20),[Date 3] varchar(20))
Insert into @Mytable ([Col 1],[Col 2],[Taken Date],[Date 1],[Date 2],[Date 3])
select * from
Select 'Data' as [Col 1],'Data' as [Col 2],'3/12/2015' as [Taken Date],'3/12/2015 7:22' as [Date 1],'' as [Date 2],'' as [Date 3]
union all
Select 'Data' as [Col 1],'Data' as [Col 2],'3/12/2015' as [Taken Date],'' as [Date 1],'3/12/2015 8:47' as [Date 2],'' as [Date 3]
union all
Select 'Data' as [Col 1],'Data' as [Col 2],'3/12/2015' as [Taken Date],'' as [Date 1],'' as [Date 2],'3/12/2015 9:27' as [Date 3]
union all
select 'Data' as [Col 1],'Data' as [Col 2],'3/22/2015' as [Taken Date],'' as [Date 1],'3/22/2015 7:27' as [Date 2],'' as [Date 3]
union all
select 'Data' as [Col 1],'Data' as [Col 2],'3/22/2015' as [Taken Date],'' as [Date 1],'' as [Date 2],'' as [Date 3]
union all
select 'Data' as [Col 1],'Data' as [Col 2],'4/12/2015' as [Taken Date],'' as [Date 1],'' as [Date 2],'' as [Date 3]
union all
select 'Data' as [Col 1],'Data' as [Col 2],'4/12/2015' as [Taken Date],'' as [Date 1],'' as [Date 2],'' as [Date 3]
union all
select 'Data' as [Col 1],'Data' as [Col 2],'4/12/2015' as [Taken Date],'' as [Date 1],'' as [Date 2],'' as [Date 3]
) as temp;
with Mytable2(
[Col 1],
[Col 2],
[Taken Date],
[Date],
[NameDate]
as
SELECT
[Col 1],
[Col 2],
[Taken Date],
[Date],
[NameDate]
FROM
(SELECT
[Col 1],
[Col 2],
[Taken Date],
[Date 1],
[Date 2],
[Date 3]
FROM
@MyTable) as p
UNPIVOT
[Date] FOR [NameDate] IN ([Date 1],[Date 2],[Date 3])
)AS unpvt
group by
[Col 1],
[Col 2],
[Taken Date],
[Date],
[NameDate]
Select * from Mytable2 t1 where [date]<>''
end
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
Ricardo Lacerda -
Mapping and combining multiple rows
Hi,
Imaging the following case From R/3 every week to different customers 10 different products# are sold..If no new idem is sold for customer no new record is generated for this customer. For example -Source file:
CustID product #sold number items
1 1 5
1 2 2
1 3 3
3 2 7
4 1 30
In this case for custID 2 no sales were generated this week so no record exists in the text file. This file must be submitted to a partner for analysis in the following structure:
Cust ID product 1 product 2 product 3 .
1 5 2 3
3 7
4 30
It is going to be text file structure after xi mapping and will be. Both files are fixed so each record and field has fixed positions predetermined.
How would be the mapping in XI performed the best in this case..?Is using BMP necessary in this case or it could be avoided and if yes how ?Looks like mapping program must be created. I appreciate any input The easy way is the better way..Of course I would like to handle some errors as well.
Do i need any conversions in inbound/outbound File Adapter and what kind of if yes ?Thanks
Jonhey
>>case From R/3 every week to different customers 10 different products# are sold
this means you are sending some values from R/3 to your partner,now this sender file,will this be an IDOC ?if yes,then which IDOC,if its gonna be a Flat file then can you provide us with the structure of the sender data type.
also it will be helpful if you can send the receiver data structure as well
Until now i dont see any need of BPM,it can be handled in message mapping but i can be more sure once i get the source and target data structure.
Thanx
Aamir -
I'm trying to organize my PDFs in iBooks on my ipad2 and can't figure out how to combine multiple PDFs into one. Any thoughts?
I'm trying to organize my PDFs in iBooks on my ipad2 and can't figure out how to combine multiple PDFs into one. Any thoughts?
-
Combining multiple rows to singe row thru SQL Stmt
Hello,
I am trying to combine values returned from multiple row into one row,
thru inner/outer sql or any optimal way.
In the example i would like to have First name, Last name, email and phone to be
returned as a single row.
create table TEMP_AAAAA
FIRST_NAME VARCHAR2(25),
LAST_NAME VARCHAR2(25),
CON_METHOD VARCHAR2(25),
CON_VALUE VARCHAR2(25)
INSERT INTO TEMP_AAAAA VALUES('TOM','MAC','EMAIL','[email protected]');
INSERT INTO TEMP_AAAAA VALUES('TOM','MAC','PHONE','12345');Any suggestion in doing it thru sql stmt.
I have done this thru pl/sql, wondering if this could be achieve thru single SQL Stmt
DECLARE
v_FIRST_NAME VARCHAR2(25);
v_SECOND_NAME VARCHAR2(25);
v_EMAIL VARCHAR2(25);
v_PHONE VARCHAR2(25);
BEGIN
v_FIRST_NAME := NULL;
v_SECOND_NAME := NULL;
v_EMAIL := NULL;
v_PHONE := NULL;
FOR IMPL_CUR IN(SELECT * FROM TEMP_AAAAA ORDER BY CON_METHOD DESC)
LOOP
IF v_FIRST_NAME IS NULL
THEN
v_FIRST_NAME := IMPL_CUR.FIRST_NAME;
END IF;
IF v_SECOND_NAME IS NULL
THEN
v_SECOND_NAME := IMPL_CUR.LAST_NAME;
END IF;
IF v_PHONE IS NULL AND IMPL_CUR.CON_METHOD = 'PHONE'
THEN
v_PHONE := IMPL_CUR.CON_VALUE;
END IF;
IF v_FIRST_NAME = IMPL_CUR.FIRST_NAME AND
v_SECOND_NAME = IMPL_CUR.LAST_NAME AND
length(v_PHONE) > 0
THEN
IF v_EMAIL IS NULL AND IMPL_CUR.CON_METHOD = 'EMAIL'
THEN
v_EMAIL := IMPL_CUR.CON_VALUE;
EXIT;
END IF;
END IF;
END LOOP;
DBMS_OUTPUT.put_line('firstName...:' || v_FIRST_NAME);
DBMS_OUTPUT.put_line('lastName....:' || v_SECOND_NAME);
DBMS_OUTPUT.put_line('PHONE.......:' || v_PHONE);
DBMS_OUTPUT.put_line('EMAIL.......:' || v_EMAIL);
END;Hi Ludy,
Following query should work -
P.S. - I have added records for one more person with first name as 'TOM1' and last name as 'MAC1' for testing purpose. Given inserts for these 2 records as well.
Connected to Oracle Database 11g Release 11.2.0.1.0
SQL>
SQL> INSERT INTO TEMP_AAAAA VALUES('TOM1','MAC1','EMAIL','[email protected]');
1 row inserted
SQL> INSERT INTO TEMP_AAAAA VALUES('TOM1','MAC1','PHONE','12345');
1 row inserted
SQL>
SQL>
SQL> SELECT t.first_name
2 ,t.last_name
3 ,MAX(decode(t.con_method, 'PHONE', t.con_value, NULL)) phone
4 ,MAX(decode(t.con_method, 'EMAIL', t.con_value, NULL)) email
5 FROM temp_aaaaa t
6 GROUP BY t.first_name
7 ,t.last_name
8 /
FIRST_NAME LAST_NAME PHONE EMAIL
TOM MAC 12345 [email protected]
TOM1 MAC1 12345 [email protected]
SQL> Hope this helps.
Cheers,
- Anirudha
Edited by: Anirudha Dhopate on Nov 10, 2011 9:12 PM -
Generating multiple rows from one physical row
I was wondering if anyone has done or knows how to generate multiple rows for one physical row. In my query "SELECT Cust_No, Amount from Balances" if the amount is > 99,999.99 I want 2 rows returned, one with an amount of 90,000.00 and the other with an amount of 9,999.99. I'm thinking I need to use a view or function to return a result set but I'm not sure how.
Thanks in advance,
Allen Davis
[email protected]James,
Well your right in that you need a function, but also 3 views to accomplish that. I just wrote up the sql below and tested it. Basically you want the first view to return all records less than your cap of 99,999, thoes that exceed that will always return as 90,000 (see example on record PK 774177177). The second view returns money that remains AFTER the cap (in your case 9,999). The second view though also has to excude the ones less than the CAP.
DATA and TABLE layout
1) Table is called T1, columns are PK : primary key value, and N2 : some number column holding the MONEY amount
2) data is below fromtable called t1 (10 records) ...
select pk,n2 from t1 order by pk
PK N2
117165529 100
274000876 200000
350682010 9999
737652242 90000
774177177 99999
1369893126 1000
1663704428 100000
1720465556 8888
1793125955 0
1972069382 1000000
Now see the records with money at 99,999 (just like in your example). You want 2 records, so the VIEWS now come into play. The view itself CALLS the function, this occurs when you select from the view. The function will either return 90,000 (your defined cap) or the remained after subtracting the money from 90,000. The 3 views are defined below (the FUNCTION which is shown after will have to be compiled first) ...
--[VIEWS START]
CREATE OR REPLACE VIEW VIEW1
(PK,SHOW_MONEY)
AS SELECT PK,FN_TRIM_MONEY(N2,1) FROM T1;
CREATE OR REPLACE VIEW VIEW2
(PK,SHOW_MONEY)
AS SELECT PK,FN_TRIM_MONEY(N2,2) FROM T1 WHERE N2 >= 99999;
CREATE OR REPLACE VIEW VIEW_ALL
(PK,SHOW_MONEY)
AS
SELECT * FROM VIEW1
UNION ALL
SELECT * FROM VIEW2;
--[VIEWS END]
OK now for the actual function ...
--[FUNCTION START]
CREATE OR REPLACE FUNCTION
FN_TRIM_MONEY
PI_MONEY NUMBER,
PI_VIEW_ID NUMBER
RETURN NUMBER AS
LS_TEMP VARCHAR2(2000);
LI_TEMP NUMBER;
LD_TEMP DATE;
LI_CON_MONEY_MAX CONSTANT NUMBER := 90000;
LS_RETURN VARCHAR2(2000);
BEGIN
IF (PI_MONEY > LI_CON_MONEY_MAX) THEN
IF PI_VIEW_ID = 1 THEN
LI_TEMP := LI_CON_MONEY_MAX;
ELSIF PI_VIEW_ID = 2 THEN
LI_TEMP := (PI_MONEY - LI_CON_MONEY_MAX);
END IF;
ELSE
LI_TEMP := PI_MONEY;
END IF;
IF LI_TEMP < 0 THEN
LI_TEMP := 0;
END IF;
LS_RETURN := LI_TEMP;
RETURN LS_RETURN;
END;
SHOW ERRORS;
--[FUNCTION END]
I compiled the function and views with no errors. This is what I get when I query the 3 views ...
--[VIEW 1]
PK SHOW_MONEY
117165529 100
274000876 90000
350682010 9999
737652242 90000
774177177 90000
1369893126 1000
1663704428 90000
1720465556 8888
1793125955 0
1972069382 90000
--[VIEW 2]
PK SHOW_MONEY
274000876 110000
774177177 9999
1663704428 10000
1972069382 910000
--[VIEW ALL]
PK SHOW_MONEY
117165529 100
274000876 90000
274000876 110000
350682010 9999
737652242 90000
774177177 90000
774177177 9999
1369893126 1000
1663704428 90000
1663704428 10000
1720465556 8888
1793125955 0
1972069382 90000
1972069382 910000
So notice the PK entry 774177177 listed twice, once with 90,000 and other with 9,999. Also notice we now have 14 records from the original 10, meaning 4 records qualified for the split (all data from VIEW 2).
This is why Oracle kicks ass, views and functions are very powerful when used together and can return pretty much anything.
Thanks,
Tyler D.
[email protected] -
Select or deselect multiple rows with one single selection event
Does anyone know how to create a JTable which can select or deselect multiple rows with one single selection event in JTable. Fore example, if the table has
row1
row2
row3
row4
row5
row6
What I need is when user select row1 or row2, both row1 and row2 should be set to be selected. Then if user press CTRL and click one of row3 or row4, both of them should be selected including the previouse selected row1 and row2.
For deselection, if row1 and row2 are selected, when users deselect one of row1 or row2, both of them should be deselected.
Hopefully someone can give me a hint.Here is a partial solution using a JList. Only one line gets highlighted when the user makes a selection in the list. But, two lines are returned. There is a blank line between every two lines.
private void addLineToList() {
String a = f_one.getText();
String b = f_two.getText();
if (a.length() == 0) {
Utils.showInformationMessage("Item field is empty.");
f_one.requestFocusInWindow();
return;
if (b.length() == 0) {
Utils.showInformationMessage("Match field is empty.");
f_two.requestFocusInWindow();
return;
model.addElement("item: " + a);
model.addElement("match: " + b);
model.addElement(" ");
int size = model.getSize();
pairList.setSelectedIndex(size - 3);
f_one.setText("");
f_two.setText("");
f_one.requestFocusInWindow();
private void editList() {
if (pairList.getSelectedValue().toString().equalsIgnoreCase(" ")) {
Toolkit.getDefaultToolkit().beep();
f_one.requestFocusInWindow();
return;
if (!f_one.getText().equals("")) {
int result = JOptionPane.showConfirmDialog(this,
"The Item field contains text. Replace the text?",
"Flash Card Activity", JOptionPane.YES_NO_OPTION,
OptionPane.INFORMATION_MESSAGE);
if (result == JOptionPane.NO_OPTION) return;
if (!f_two.getText().equals("")) {
int result = JOptionPane.showConfirmDialog(this,
"The Match field contains text. Replace the text?",
"Flash Card Activity", JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE);
if (result == JOptionPane.NO_OPTION) return;
String item = "";
String match = "";
int index = pairList.getSelectedIndex();
String choice = model.getElementAt(index).toString();
if (choice.startsWith("item")) {
item = choice;
match = model.getElementAt(index + 1).toString();
model.remove(index);
model.remove(index);
model.remove(index);
else {
item = model.getElementAt(index - 1).toString();
match = choice;
model.remove(index + 1);
model.remove(index);
model.remove(index - 1);
int size = model.getSize();
if (size > 2) {
pairList.setSelectedIndex(size - 2);
f_one.setText(item.substring(6));
f_two.setText(match.substring(7));
f_one.requestFocusInWindow();
} -
I wanted to display the multiple rows in one row but column should be diff
Hi
Could any body help me regarding this query how to write to get the multiple rows in one row.
eg.
i have one table tab1(eno number,ename varchar2,uid1 varchar2,uid2 varchar2,uid3 varchar4)
but when i am runing the query I am getting multiple record against one eno number because of uid1,uid2,uid3
suppose value of table is
eno ename uid1 uid2 uid3
1 a u1
1 a u2
1 a u3
when i am quering it is coming same as above but I want in one row
eno ename uid1 uid2 uid3
1 a u1 u2 u3
can any onle help me how to write the query for this requirement.
thanks
saifwhich is hard coded in my code? Here another approach, but fail for c as there is no information for the value of a column: does 1 in u1 means col 1, etc.
/* Formatted on 2012/05/29 16:29 (Formatter Plus v4.8.8) */
WITH t AS
(SELECT 1 col1, 'a' col2, 'u1' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'a' col2, 'u2' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'a' col2, 'u3' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'b' col2, 'u1' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'b' col2, 'u3' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'b' col2, 'u2' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'c' col2, 'u1' col3
FROM DUAL
UNION ALL
SELECT 1 col1, 'c' col2, 'u3' col3
FROM DUAL)
SELECT xx.col1, xx.col2, MAX (DECODE (xx.rn, 1, col3)) AS uid1, MAX (DECODE (xx.rn, 2, col3)) AS uid2,
MAX (DECODE (xx.rn, 3, col3)) AS uid3
FROM (SELECT t.col1, t.col2, t.col3, ROW_NUMBER () OVER (PARTITION BY col1, col2 ORDER BY col3) rn
FROM t) xx
GROUP BY col1, col2;output:
COL1 COL2 UID1 UID2 UID3
1 a u1 u2 u3
1 b u1 u2 u3
1 c u1 u3
Edited by: ʃʃp on May 29, 2012 2:30 AM -
How to combine many rows into one row
Hi all,
I have a question regarding to how to combine many rows into one row?
My result set is like that:
ITEM_NO NAME1
11 abc
11 cde
11 fg
Want to combine them into
ITEM_NO NAME1
11 abc;cde;fg
would anybody can tell me how to do that? Thanks
RayYou can check this --
satyaki>
satyaki>
satyaki>create table t
2 as
3 select 11 ITEM_NO, 'abc' NAME1 from dual
4 union all
5 select 11 ITEM_NO, 'cde' NAME1 from dual
6 union all
7 select 11 ITEM_NO, 'fg' NAME1 from dual;
Table created.
satyaki>
satyaki>
satyaki>
satyaki>set lin 10
satyaki>
satyaki>desc t;
Name Null? Type
ITEM_NO NUMBER
NAME1 VARCHAR2(3)
satyaki>
satyaki>
satyaki>set lin 1000
satyaki>
satyaki>
satyaki>
satyaki>SELECT ITEM_NO,
2 LTRIM(MAX(SYS_CONNECT_BY_PATH(NAME1,';'))
3 KEEP (DENSE_RANK LAST ORDER BY curr),';') AS NAME1_DET
4 FROM (SELECT ITEM_NO,
5 NAME1,
6 ROW_NUMBER() OVER (PARTITION BY ITEM_NO ORDER BY NAME1) AS curr,
7 ROW_NUMBER() OVER (PARTITION BY ITEM_NO ORDER BY NAME1) -1 AS prev
8 FROM t)
9 GROUP BY ITEM_NO
10 CONNECT BY prev = PRIOR curr AND ITEM_NO = PRIOR ITEM_NO
11 START WITH curr = 1;
ITEM_NO NAME1_DET
11 abc;cde;fgRegards.
Satyaki De. -
Combine multiple rows in single row
I am new to SQL server and i am trying to combine multiple row in single row but i am not able to do it.Can anyone help me out?
Input :
Id |RED |BUY |BSW
1328 NULL NULL 0.05
1328 NULL 0.06 NULL
1328 0.01 NULL NULL
1328 0.05 NULL NULL
1329 NULL NULL 0.05
1329 NULL 0.05 NULL
1329 0.05 NULL NULL
Output
Id |RED |BUY |BSW
1328 0.01 0.06 0.05
1328 0.05 NULL NULL
1329 0.05 0.05 0.05Actually I am consolidating above result into text file and sending it to external system.Main aim is to remove NULL values and arrange the data as expected output.
Also expected output can be
Id |RED
|BUY |BSW
1328 0.05
0.06 0.05
1328 0.01
NULL NULL
Or
Id |RED
|BUY |BSW
1328 0.01
0.06 0.05
1328 0.05
NULL NULL
for Id= 1328. -
Adding and Deleting Multiple Rows or Columns
How do you add or delete more than one row or column at a time.
Robby! wrote:
That's a great finding!
I just wrote a feedback requesting a shortcut like this.
It is a pity though that they desing it to work only if you select the header of the row/column. It should be enabled to work from within any cell in the table.
Who wrote such an error ?
These interesting shortcuts behave flawlessly even if the cursor was in D18 for instance.
(a) I never saw them in the delivered resources.
(b) they aren't responding to the OP's question which was about "Adding and Deleting Multiple Rows and Columns"
Yvan KOENIG (from FRANCE vendredi 3 octobre 2008 18:39:01) -
Combine multiple drawings into ONE SHEET
Hello, this is a question on Acrobat Pro, ver 8, using Windows XP. I guess I understand how to combine multiple files into a single PDF-file. However, this morning I happened to see the option mentioned in the subject line. When you go to "Combine files" > "Getting started with combined files" and select "CAD drawings" the description reads: "Combine multiple drawings into one sheet that's easy to navigate and print". How can this be done? I need to combine 8 ea CAD drawings (already converted to PDF) into ONE SHEET for printing without having the need taping 8 pieces of paper together. Arranging the drawing within the CAD application is not an option because the files were delivered by a 3rd party company and they only deliver PDFs
Hi Priya,
You can do this by merging the requets.
1. goto Se10 and right click on the request and seelct merge requests.
2. It will ask you from request and to request. Give the request names.
3. After merging first request contents will be added to second request and
first request will be deleted.
Like that you can merge 3 requests to one request.
Let me know if you want more info.
Thanks & Regards,
Siri. -
Passing Multiple rows from one external webpart list to another
Hi Folks,
I have almost spent 1 week looking into this without any success. I have an external list "List A" (in a webpart) with one of the columns as "State".
Another external list "List B" (in a webpart ) has state and user as columns. In some case I want to pass 1 state and in another I want to pass multiple state. Passing one state from List A to List B works fine. But Multiple state does
not work because the webpart list has the property "Send First row to connected web parts when page loads". If I disable this option then the web part does not pass anything. Is there a way to pass multiple rows from one Webpart
external list to other?http://www.sharepointanalysthq.com/2010/07/bcs-external-list-limitations/
No Lookups
Unfortunatly the only thing that you can do a look up on in an external list is on the ID column, anything else and you are out of luck.
http://social.technet.microsoft.com/Forums/en-US/615771a0-ba78-4e38-9e2d-ded0204173ba/external-list-referenced-as-sharepoint-lookup?forum=sharepointgeneralprevious
Try below webpart. it should help
http://www.sparqube.com/SharePoint-Lookup-Column/
If this helped you resolve your issue, please mark it Answered -
Scan and collate multiple pages to one document with hp8630
How do I scan, collate and save a multiple page document into one pdf document utilizing an HP8630? Thank you.
Hi , I understand that you would like to know how to scan and collate multiple documents into one file. I would be happy to help you.
If you are using Windows, please try the following steps: From the HP Scan software, select Advanced Settings, click on the File tab and uncheck Create a separate file for each scanned image, this will allow multiple page scans to save to one file. If you are using a Mac, try the following: From the Preview Software, once you have the scanned image, select PDF and check combine into single document below. From the Print and Scan window, select PDF and check combine into single document below. What operating system are you using?How to Find the Windows Edition and Version on Your Computer.Mac OS X: How Do I Find Which Mac OS X Version Is on My Computer? If you appreciate my efforts, please click the 'Thumbs up' button below. Thank You.
Maybe you are looking for
-
Sending mail to group... help!
I have created a group in Address Book... Some of the people have two or more email addresses in Address Book (home, school, work, etc.). When I go into Mail, and put the group in the "To:" box, all the names appear... but Mail automatically defaults
-
hi! can any onr help me with a callback problem. Pc dialing into router via ISDN doesnt work with callback but works without it.
-
Iphone 6, iOS 8.0.2, battery drain & overheating
So I upgraded to an iphone 6 from an iphone 5. The phone came with iOS 8.0.2. It seems that I am not the only one with this issue but my my phone gets hot after a short use and battery drains rather quickly. It seems to be a software issue since many
-
Yesterday, I could make calls on my new iPhone5. Today, it says "No SIM Card Installed." Now I can't make calls. Any help?
-
Ho to decrypt snmp log using Snmp4j
Hi all I have problem with decoding snmp log using my own listener. From the sample inside the snmp4j source code, what i can see here is we have to use their listener. Because of this, the snmp4j listener cannot bind the port 162 because my program