Merging Mulitiple Rows into single row
Hi All ,
I am loading master data to DSO from PSA .
In my source i have got 5 records for specific keys
Ex : Customer Divis DistChan Flag Partner1 Partner Name
1 PC 11 F1 11 Jhon
1 PC 11 F2 12 Jone
1 PC 11 F3 13 Jack
1 PC 11 F4 14 Jame
In Target i need to have data in single records
Ex :
: Customer Divis DistChan Flag Partner1 Partner1 Name Partner2 Partner2 Name Partner3 Partner3 Name Partner4 Partner4 Name
1 PC 11 F1 11 Jhon 12 Jone 13 jack 14 Jame
To achieve this i have tried with multiple Field routines , but data is not populating for all partner fields .
Out put in DSO
Customer Divis DistChan Flag Partner1 Partner1 Name Partner2 Partner2 Name Partner3 Partner3 Name Partner4 Partner4 Name
1 PC 11 F1 11 Jhon
Any inputs why its not populating data for other fields ...is there other method to make this ??
All your valuable inputs are appropriated
Thanks in advance
Regards ,
Hari
Hi Raf /Rajesh ,
Thank you so much for your replies
@ Raf Rule group will update data into multiple rows ..
@ Rajesh
1.In my data only Falg is differentiator .
2.You need to create multiple Infoobjects to meet your requirement. --May i know what do you mean ??, already i have created multiple infoobjects for every partner w.r.t falg .
Shown in above data
3.Also you are not sure whether the data from source is always consistent like 5 distribution channels, 5 flags etc. - in data i will have only 5 different flag value -F1,F2,F3,F4,F5
I am wondered to know why multiple field routines are not working ....
Regards ,
Hari
Similar Messages
-
Merge multiple rows into single row (but multiple columns)
How to merge multiple rows into single row (but multiple columns) efficiently.
For example
IDVal IDDesc IdNum Id_Information_Type Attribute_1 Attribute_2 Attribute_3 Attribute_4 Attribute_5
23 asdc 1 Location USA NM ABQ Four Seasons 87106
23 asdc 1 Stats 2300 91.7 8.2 85432
23 asdc 1 Audit 1996 June 17 1200
65 affc 2 Location USA TX AUS Hilton 92305
65 affc 2 Stats 5510 42.7 46 9999
65 affc 2 Audit 1996 July 172 1100
where different attributes mean different thing for each Information_type.
For example for Information_Type=Location
Attribute_1 means Country
Attribute_2 means State and so on.
For example for Information_Type=Stats
Attribute_1 means Population
Attribute_2 means American Ethnicity percentage and so on.
I want to create a view that shows like below:
IDVal IDDesc IDNum Country State City Hotel ZipCode Population American% Other% Area Audit Year AuditMonth Audit Type AuditTime
23 asdc 1 USA NM ABQ FourSeasons 87106 2300 91.7 46 85432 1996 June 17 1200
65 affc 2 USA TX AUS Hilton 92305 5510 42.7 46 9999 1996 July 172 1100
ThanksHi,
That's called Pivoting . The forum FAQ has a section on this subject: {message:id=9360005}
I hope this answers your question.
If not, post your best attempt, along with a little sample data (CREATE TABLE and INSERT statements, relevant columns only), and also post the results you want from that data. (You did post the results you wanted, but they're very hard to read because they're not formatted. Use \ tags, as described in the forum FAQ, below.)
Explain, using specific examples, how you get the results you want from the data given.
Always say which version of Oracle you're using (e.g., 11.2.0.2.0). This is always important, but especially so with pivots.
See the forum FAQ {message:id=9360002} -
Convert multiple rows into single rows for the respective index name
Dear Experts,
I want to convert multiple rows into single rows for the respective index name,
Here is my query.
SELECT user_tables.table_name, user_indexes.index_name, user_ind_columns.column_name
FROM user_tables
JOIN user_indexes on user_indexes.table_name = user_tables.table_name
join USER_IND_COLUMNS on USER_INDEXES.INDEX_NAME = USER_IND_COLUMNS.INDEX_NAME
where user_indexes.index_name not like '%PK%' AND user_ind_columns.column_name NOT LIKE '%SYS%'
ORDER BY user_tables.table_name,user_indexes.index_name;
Result of previous query
TABLE_NAME
INDEX_NAME
COLUMN_NAME
T1
IDX_ACCNTYPCFG1
ENABLE_SERVICE
T1
IDX_ACCTTYPCFG1
ACC_CODE
T1
IDX_ACCTTYPCFG1
ACCTYPE
T2
IDX_ACCTTYPCFGAPP1
ACCTYPE
T3
IDX_ACTLG1
MOBILE_NO
T3
IDX_ACTLG1
ID
Desired output required is
TABLE_NAME
INDEX_NAME
COLUMN_NAME
T1
IDX_ACCNTYPCFG1
ENABLE_SERVICE,ACC_CODE,ACCTYPE
T2
IDX_ACCTTYPCFGAPP1
ACCTYPE
T3
IDX_ACTLG1
ACCTYPE,MOBILE_NO
please help.Maybe
with
user_tables as
(select 'T1' table_name,'IDX_ACCNTYPCFG1' index_name,'ENABLE_SERVICE' column_name from dual union all
select 'T1','IDX_ACCTTYPCFG1','ACC_CODE' from dual union all
select 'T1','IDX_ACCTTYPCFG1','ACCTYPE' from dual union all
select 'T2','IDX_ACCTTYPCFGAPP1','ACCTYPE' from dual union all
select 'T3','IDX_ACTLG1','MOBILE_NO' from dual union all
select 'T3','IDX_ACTLG1','ID' from dual
select table_name,
case index_name when 'IDX_ACCNTYPCFG1' then 'IDX_ACCTTYPCFG1' else index_name end index_name,
listagg(case column_name when 'ID' then 'ACCTYPE' else column_name end,',') within group (order by null) column_name
from user_tables
group by table_name,case index_name when 'IDX_ACCNTYPCFG1' then 'IDX_ACCTTYPCFG1' else index_name end
TABLE_NAME
INDEX_NAME
COLUMN_NAME
T1
IDX_ACCTTYPCFG1
ACCTYPE,ACC_CODE,ENABLE_SERVICE
T2
IDX_ACCTTYPCFGAPP1
ACCTYPE
T3
IDX_ACTLG1
ACCTYPE,MOBILE_NO
Regards
Etbin -
Combining Multiple Rows into single row with multple columns
Hi Experts,
I have the following requirement, kindly help me.
I have data in my table like below.
ID NAME DEPT
1 Sam 10
1 Sam 20
2 alex 30
2 alex 40
2 alex 50
3 vinod 60
3 vinod 70
I want to show the same data into single row with dynamically generating columns for DEPT. I want show like below.
ID NAME DEPT1 DEPT2 DEPT3
1 Sam 10 20
2 alex 30 40 50
3 vinod 60 70
It's urgent requirement, kindly help me.
Thanks in advance.Right I've had my drink, so what was this "urgent" question then?
798616 wrote:
I have data in my table like below.
ID NAME DEPT
1 Sam 10
1 Sam 20
2 alex 30
2 alex 40
2 alex 50
3 vinod 60
3 vinod 70
I want to show the same data into single row with dynamically generating columns for DEPT. I want show like below.Dynamic numbers of columns eh! Tricky.
If you understand how SQL statements are executed it's along these lines...
1. Open Cursor
2. Parse SQL statement and determine columns
3. Bind in any input values
4. Fetch data
5. Bind out values to columns
6. Repeat step 3 until no more data
7. Close cursor
Now, you're expecting that you can determine the columns (step 2) from the fetched data (step 4 onwards). You can't. The SQL engine needs to know the expected columns before any data is fetched so, it can't base the number of columns on the data itself.
If you need that requirement, you would need to query the data first and build up a dynamic query based on the data and then execute that dynamically built query to fetch the data and pivot it into those columns, which means that you have queried the data twice. Not good practice and not good (or simple) coding.
What you're talking of doing is something that should be handled at the presentation/interface layer, not as part of the data fetch.
Typically these sorts of things are handled most easily in report generation/writer tools such as Oracle Reports, Business Objects etc. where they fetch the data from the database and then process it to format it on the display, pivoting the results as required.
It's not something that lends itself to be easily achieved in SQL. Yes, SQL can do pivoting of data quite easily, but NOT with a dynamic number of columns.
If you were to specify that there is a maximum number of columns that you could get (rather than wanting it dynamic), then you can do it simply in SQL with the max-decode method...
SQL> ed
Wrote file afiedt.buf
1 with t as (select deptno, ename, row_number() over (partition by deptno order by ename) as rn from emp)
2 --
3 select deptno
4 ,max(decode(rn,1,ename)) as ename1
5 ,max(decode(rn,2,ename)) as ename2
6 ,max(decode(rn,3,ename)) as ename3
7 ,max(decode(rn,4,ename)) as ename4
8 ,max(decode(rn,5,ename)) as ename5
9 ,max(decode(rn,6,ename)) as ename6
10 ,max(decode(rn,7,ename)) as ename7
11 ,max(decode(rn,8,ename)) as ename8
12 ,max(decode(rn,9,ename)) as ename9
13 ,max(decode(rn,10,ename)) as ename10
14 from t
15 group by deptno
16* order by deptno
SQL> /
DEPTNO ENAME1 ENAME2 ENAME3 ENAME4 ENAME5 ENAME6 ENAME7 ENAME8 ENAME9 ENAME10
10 CLARK KING MILLER
20 ADAMS FORD JONES SCOTT SMITH
30 ALLEN BLAKE JAMES MARTIN TURNER WARD
SQL> -
Concatenation Multiple Rows into Single Row
My select query is like wise
ID Name
1 Arthi
2 Preethi
3 Madhu
4 Saranya
Above i listed all the names using the select query. Now i have to combine this 4 rows in single row like
Arthi,Preethi,Madhu,Saranya.
Also this rows may be 5 or 50 too. So what are Names listed using select statement those should combine into one Single String.
Help me plPlease post this in an appropriate forum;
SQL and PL/SQL
PL/SQL
Community Feedback and Suggestions (Do Not Post Product-Related Questions Here)
Adith -
ALV - Multiple Rows into Single Row
I have a requirement to display the ALV output from CDHDR&CDPOS tables here in the output i have 15 columns( Fields ) any changes im displaying in report output ,but if there is same time multiple columns will change im displaying as individual record instead of that i need to show as single row.
in this output last three records have same time change but i have populated into three different columns i want to make it as SINGLE Row Record.
Thanks!!We don't need script task for this. Use TSQL in the datasource. Refer below example
DECLARE @TEMP TABLE(ID INT, [VALUE] NVARCHAR(30))
INSERT INTO @TEMP VALUES(1 , 'MAZ')
INSERT INTO @TEMP VALUES(1 , 'HON')
INSERT INTO @TEMP VALUES(1 , 'FOR')
INSERT INTO @TEMP VALUES(2 , 'JEEP')
INSERT INTO @TEMP VALUES(2 , 'CHE')
INSERT INTO @TEMP VALUES(3 , 'NIS')
INSERT INTO @TEMP VALUES(4 , 'GMC')
INSERT INTO @TEMP VALUES(4 , 'ACC')
INSERT INTO @TEMP VALUES(4 , 'LEX')
SELECT [id],
Stuff((SELECT ',' + [VALUE]
FROM @TEMP
WHERE [id] = a.[id]
FOR xml path('')), 1, 1, '') [VALUE]
FROM @TEMP a
GROUP BY [id]
Regards, RSingh -
Club Multiple rows into single row
Hi,
Iam facing this problem. Iam having this table client_details with columns as
client -- group -- group_code
1234 ------ X ------ code1
1234 ------ Y ------ code2
5555 ------ X ------ code3
5555 ------ Y
Now when I Query this table for a particular client, I require both the group_code for this client (it can be null also). But I require the result in a SINGLE row.
The group will be either X or Y only.
Can anyone help me out pls
tnx
Cheoops
SQL> select client, max(decode("GROUP", 'X', GROUP_CODE)) X, max(decode("GROUP", 'Y', GROUP_CODE)) Y from client_details group by client;
CLIENT X Y
1234 code1 code2
5555 code3 -
Hi friends,
I have one table like:
10 SAM
10 CAN
10 MAN
10 DEV
20 MAL
And want output like:
10 SAM,CAN,MAN,DEV
20 MAL
i want to combine multiple rows into one within an existing view.
What query will suit this to get this type of output.Please refer to this thread
column values separated by , -
Combine 2 rows into single row?
I have a table A which has information related to a process. For process completion there exist 2 rows. One has in it the total elapsed time, the time the entire process (which is multipart) begin and end time, but the columns related to rows processed are blank. Another related row has a start, end and elapsed time in it -- which I don't want -- but it has the row counts that I do want.
I want to take these 2 rows, combine the relevant information into 1 row and insert that row into table B.
I know I could insert from the first row and then come back and update it from the second row, but I hate having to read Table A twice. Any suggestions?Hello
Is it not just a matter of using group by with sum? I may well have missed an important detail but here's a starting point:
SQL> CREATE TABLE DT_TEST_PROCESS
2 ( id number,
3 stage number,
4 rows_processed number,
5 elapsed number
6 )
7 /
Table created.
SQL>
SQL> INSERT INTO dt_test_process
2 VALUES(1,1,100,0)
3 /
1 row created.
SQL> INSERT INTO dt_test_process
2 VALUES(1,2,0,10)
3 /
1 row created.
SQL> INSERT INTO dt_test_process
2 VALUES(2,1,1000,0)
3 /
1 row created.
SQL> INSERT INTO dt_test_process
2 VALUES(2,2,0,20)
3 /
1 row created.
SQL>
SQL> INSERT INTO dt_test_process
2 VALUES(3,1,500,0)
3 /
1 row created.
SQL> INSERT INTO dt_test_process
2 VALUES(3,2,0,30)
3 /
1 row created.
SQL>
SQL> SELECT
2 id,
3 SUM(rows_processed) total_rows,
4 SUM(elapsed) total_elapsed
5 FROM
6 dt_test_process
7 GROUP BY
8 id
9 /
ID TOTAL_ROWS TOTAL_ELAPSED
1 100 10
2 1000 20
3 500 30
SQL>
SQL> CREATE TABLE dt_test_process_sum AS
2 SELECT
3 id,
4 SUM(rows_processed) total_rows,
5 SUM(elapsed) total_elapsed
6 FROM
7 dt_test_process
8 GROUP BY
9 id
10 /
Table created.HTH
David -
Merge 2 rows into single row with data update?
hello all,
i have a table with below data,
declare @tbl table (uid int, uname varchar(10), start_dt date, end_dt date)
insert into @tbl values (1, 'env1', '4/4/2010', '5/5/2012')
insert into @tbl values (2, 'env2', '5/4/2010', '6/6/2012')
--earlier start data is '4/4/2010' from 'env1'
--latest end data is '6/6/2012' from 'env2'
insert into @tbl values (3, 'env1', '3/3/2010', '4/4/2012')
insert into @tbl values (4, 'env2', '2/2/2010', '5/5/2012')
--earlier start data is '2/2/2010' from 'env2'
--latest end data is '5/5/2012' from 'env2'
insert into @tbl values (5, 'env1', '8/8/2010', '12/12/2012')
insert into @tbl values (6, 'env2', '9/9/2010', '10/10/2012')
--earlier start data is '8/8/2010' from 'env1'
--latest end data is '12/12/2012' from 'env1'insert into @tbl values (6, 'envX', '9/9/2010', '10/10/2012')insert into @tbl values (6, 'envY', '9/9/2010', '10/10/2012')
i need to merge 2 rows for column "uname" having value "env1" & "env2" to "envZ" and need to capture earlier start date and latest end date from both and update with new.
the desire output should be,
declare @tbl table (uid int, uname varchar(10), start_dt date, end_dt date)
insert into @tbl values (1, 'envZ', '4/4/2010', '6/6/2012')
insert into @tbl values (4, 'envZ', '2/2/2010', '5/5/2012')
insert into @tbl values (5, 'envZ', '8/8/2010', '12/12/2012')
insert into @tbl values (6, 'envX', '9/9/2010', '10/10/2012')
insert into @tbl values (6, 'envY', '9/9/2010', '10/10/2012')
note - i must need to update one row and delete other row as i can't insert new rows (having huge data with other columns also).
please suggest optimize query. thanks!Which version and edition of SQL Server are you using?
Whenever there is a row with 'env1', there is a corresponding 'env2' and vice versa?
The row with 'env2' is always after the row with 'env1'? (uid+1)
If the answers are yes to both questions above, here's a possibility:
-- code #1 v3
;with
ENVZ as (
SELECT uid= case when T1.start_dt <= T2.start_dt then T1.uid else T2.uid end,
start_dt= case when T1.start_dt <= T2.start_dt then T1.start_dt else T2.start_dt end,
end_dt= case when T1.end_dt > T2.end_dt then T1.end_dt else T2.end_dt end
from @tbl as T1
inner join @tbl as T2 on T2.uid=T1.uid+1 and T2.uname='env2'
where T1.uname = 'env1'
MERGE
into @tbl as T3
using ENVZ as T4
on T3.uid = T4.uid
when matched and (T3.uname in ('env1','env2')) then
UPDATE set T3.uname= 'envZ',
T3.start_dt= T4.start_dt,
T3.end_dt= T4.end_dt
when not matched by source and (T3.uname in ('env1','env2')) then
DELETE;
The table @tbl is read three times in the above code. There are probably ways to optimize the above code. Or even other more efficient approach.
José Diz Belo Horizonte, MG - Brasil -
Concatenate multiple rows into single row
Hi I need to concatenate multiple rows,
these are the rows I have
Name
Rnk
Northshore
1
F3
2
Borderline
3
Mattoon
3
Vinemane
5
Arizona
5
WestShore
5
Schumburg
5
Wilson
5
This is how I would like it to look
Name
Rnk
Northshore
1
F3
2
Borderline, Mattoon
3
Vinemane, Arizona, WestShore, Schumburg, Wilson
5
Thanks
LISA86I meant is there a way to do it without using a table?
LISA86
We have not used any extra table. Ok, Try the below:
Select distinct
names= REPLACE(
Select a.Name as [data()]
From YOURTABLENAME A
Where A.Rnk = b.Rnk
Order by a.Name
FOR XML PATH ('') ), ' ', ',') ,Rnk
From YOURTABLENAME B Order by Rnk -
Concatenating multiple rows into Single Row
Hi Experts,
I have got a new challenge in my project, but i am not aware of that one, please help me...
i have a source like this
col1 col2
1 a
1 b
1 c
my target would be like this
col1 col2
1 a,b,c
i know how to achieve this in SQL( using LISTAGG( ) or wmconcat( ) ), BUT........
how i can load this into ODI Target table, pleae explain in detail ..
Cheers
VenkatHi,
You should be able to map your LISTAGG function on the target datastore as Col2, if you get in problems with group by , try this trick to supress the group by from ODI :
http://www.business-intelligence-quotient.com/?p=905 -
i have a table
EID Code
1 100
1 101
2 102
1 104
i want to get the output as Eid code code1 code2
1 100 101 104
2 102
can anyone suggest on this?Not sure why so many are suggesting string aggregation techniques when the OP said...
user10829046 wrote:
i want to get the output as Eid code code1 code2
1 100 101 104
2 102 Clearly the output is required in seperate columns, not as one aggregated string.
The solutions should relate to pivoting, not string aggregation.
e.g.
SQL> ed
Wrote file afiedt.buf
1 with t as
2 (select 1 EID, 100 code from dual union all
3 select 1 ,101 from dual union all
4 select 2 ,102 from dual union all
5 select 1 ,104 from dual)
6 --
7 --
8 select eid
9 ,max(decode(rn, 1, code)) as code1
10 ,max(decode(rn, 2, code)) as code2
11 ,max(decode(rn, 3, code)) as code3
12 from (select eid, code, row_number() over (partition by eid order by code) as rn
13 from t
14 )
15 group by eid
16* order by 1
SQL> /
EID CODE1 CODE2 CODE3
1 100 101 104
2 102
SQL> -
HOW TO COMBINE MULTIPLE ROWS INTO SINGLE ROWS
Hi,
I have a table with the following data:
CASE-1
TABLE -X
RNO FROM_SQN TO_SQN DATE
==========================================
991 9 11 2010-01-01
991 11 22 2010-01-01
991 22 33 2010-01-01
992 33 44 2010-01-01
I want to see the result data as follows:
RNO FROM_SQN TO_SQN DATE
==========================================
991 9 44 2010-01-01
CASE-2
TABLE -X
RNO FROM_SQN TO_SQN DATE
==========================================
991 9 11 2010-01-01
991 15 22 2010-01-01
991 22 34 2010-01-01
992 33 44 2010-01-01
I want to see the result data as follows:
RNO FROM_SQN TO_SQN DATE
==========================================
991 9 11 2010-01-01
991 15 44 2010-01-01
Please help me how to achieve this using SQL.
Edited by: 986725 on Feb 7, 2013 2:36 AMwith x as
select 991 rno, 9 from_sqn ,11 to_sqn ,to_date('2010-01-01','yyyy-mm-dd') dt
from dual union all
select 991, 15 ,22 ,to_date('2010-01-01','yyyy-mm-dd') from dual union all
select 991, 22 ,33 ,to_date('2010-01-01','yyyy-mm-dd') from dual union all
select 991, 33 ,44 ,to_date('2010-01-01','yyyy-mm-dd') from dual
x_with_group as
select rno,from_sqn,to_sqn,dt,
sum(sm) over(partition by rno,dt order by from_sqn) sm
from
select rno,from_sqn,to_sqn,dt,
from_sqn-
nvl(lag(to_sqn) over(partition by rno,dt order by from_sqn),0) sm
from x
select rno,min(from_sqn) from_sqn,max(to_sqn) to_sqn,dt
from x_with_group
group by rno,dt,sm
order by rno,dt,from_sqn;
RNO FROM_SQN TO_SQN DT
991 9 11 01-jan-2010
991 15 44 01-jan-2010 Edited by: jeneesh on Feb 7, 2013 4:59 PM
Assumed the date values are actually DATE types.
Partition on DT and RNO can be amended as per your requirement..
And assumed your sample data has a typo..
If your data is correct..
with x as
select 991 rno, 9 from_sqn ,11 to_sqn ,to_date('2010-01-01','yyyy-mm-dd') dt
from dual union all
select 991, 15 ,22 ,to_date('2010-01-01','yyyy-mm-dd') from dual union all
select 991, 22 ,33 ,to_date('2010-01-01','yyyy-mm-dd') from dual union all
select 992, 33 ,44 ,to_date('2010-01-01','yyyy-mm-dd') from dual
x_with_group as
select rno,from_sqn,to_sqn,dt,
sum(sm) over(order by from_sqn) sm
from
select rno,from_sqn,to_sqn,dt,
from_sqn-
nvl(lag(to_sqn) over(order by from_sqn),0) sm
from x
select min(rno) rno,min(from_sqn) from_sqn,max(to_sqn) to_sqn,min(dt) dt
from x_with_group
group by sm
order by rno,dt,from_sqn;
RNO FROM_SQN TO_SQN DT
991 9 11 01-jan-2010
991 15 44 01-jan-2010 Edited by: jeneesh on Feb 7, 2013 5:14 PM -
Merging rows into one row but into SEPARATE Columns
Hello Gurus,
I have searched alot on OTN and many other places, but no where I could get the solution of how can we merge rows into one row but separate column. For example
Consider the below scenario
"DEPARTMENT", "EMP","NAME","SUBJECT"
"Electronics","1","Sam","LIC"
"Electronics","2","Pam","VLSI"
"Electronics","3","Tom","C"
"Mech","1","Abu","Thermo"
"Mech","4","Lina","Machines"Now, I need the output like
Based on Department as Group By Clause
"DEPARTMENT", "EMP1","NAME1","SUBJECT1","EMP2","NAME2","SUBJECT2","EMP3","NAME3","SUBJECT3"
"Electronics","1","Sam","LIC","2","Pam","VLSI","3","Tom","C"
"Mech","1","Abu","Thermo","4","Lina","Machines"
The row data to be loaded into separate columns. Name of the column is not an issue... can be anythingIn all the forums which I went through I could find them loading into a single column, but not into respective separate columns.
Any help would be much appreciated.
Thanks848265 wrote:
Frank,
I saw your name nearly n number of times, as I went through many forums today... And the link which you have just posted, I went through it today afternoon.
Could you please explain this bit taken from your dynamic pivot post.
SELECT DISTINCT
', COUNT (CASE WHEN job = '''
|| job
|| ''' ' AS txt1
, 'THEN 1 END) AS '
|| job
|| '_CNT' AS txt2
FROM scott.emp
ORDER BY txt1;Many Thanks.You only need that when you need column aliases based on the actual data (and you explicitly said you don't need that) or when can't put an upper bound on the number of columns to be displayed. If that doesn't apply to this problem, then don't use any kind of dynamic SQL (like the code above); it makes the job much more difficult, less efficient and less robust.
Here's what the code above is doing.
If you were hard-coding a query that showed the number of people in each job, and you knew that the possible jobs were 'ANALYST', 'CLERK' and 'MANAGER', then you might hard-code a query like this:
SELECT deptno
, COUNT (CASE WHEN job = 'ANALYST' THEN 1 END) AS analyst
, COUNT (CASE WHEN job = 'CLERK' THEN 1 END) AS clerk
, COUNT (CASE WHEN job = 'MANAGER' THEN 1 END) AS manager
FROM scott.emp
GROUP BY deptno
;If the jobs had different names, or if there were not 3 different jobs, then you would have to change the lines in the SELECT clause that start with ", COUNT ( CASE ...".
The code you posted is from an example of dynamic SQL, where you first run a Preliminary Query . (What you posted above is, in fact, the complete preliminary query.) The output of that preliminary query is exactly the variable part of the real query, such as:
, COUNT (CASE WHEN job = 'ANALYST' THEN 1 END) AS analyst
, COUNT (CASE WHEN job = 'CLERK' THEN 1 END) AS clerk
, COUNT (CASE WHEN job = 'MANAGER' THEN 1 END) AS managerYou then use this output as part of your main query. In other words, you can write something today that will generate exacrly as many columns as you need next year, with names from the data as it is next year. How? because you're not writing the full query today. The variable part will be written by the preliminary query when it runs next year.
Maybe you are looking for
-
NEW! 4.09 Soundstorm Audio driver package
Okay, Guess that marriage is not the end of life so let me get again active in this forum So here is Markoul's debut in 2004... You did the Microsoft Windows Update to Audio driver for nf1/nf2 soundstorm driver version 4.09 and you ended up with a sc
-
Hello Community my ULS-logs are flooded with entries like w3wp.exe SharePoint Foundation Topology ajczh High Unable to create the service call usage entry. Exception details: System.ObjectDisposedException: Message is closed. at System.ServiceModel.C
-
Passing data from Applet to JSP and back
What is the best way for me to communicate between an Applet and a jsp page? I want to be able to call Applet methods from the JSP and be able to send data to the JSP from the Applet. Thanks.
-
Using wildcard in Host header-value
I have a redirect in my configuration that if a host header matches a certain value, then it will redirect to https. Originally I had the full host header, www.domain.com (actually www[.]domain[.]com). However, I found out that if a user just enters
-
I don't have a pc but want firefox on my iphone
''dupe of https://support.mozilla.org/en-US/questions/920596'' Want firefox but don't have a computer what can I do