Home » SQL & PL/SQL » SQL & PL/SQL » CONCATENATE QUERY (ORACLE, 8.1.7.0.0, WINDOWS 2007)
CONCATENATE QUERY [message #611783] |
Tue, 08 April 2014 22:07  |
kumarvk
Messages: 214 Registered: July 2004
|
Senior Member |
|
|
Dear Experts,
I am not able to run this concatenate query as it is not displaying my required result.
I want the LIC_NOs to be displayed came in for service. for example
800 SUPER WASTE MANAGEMENT PTE LTD has got 10 units
1 in Jan, 3 came in Feb, 6 in Mar. I want these lic no to be displayed in the respective months.
I am attaching my table script and rows to be inserted, concatenate function and my sql.
CREATE TABLE MSS_RETENTION
(
CUSTOMER VARCHAR2(60),
LIC_NO VARCHAR2(10),
CHS_NO VARCHAR2(25),
RO_DATE DATE
)
PCTUSED 40
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 1M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
LOGGING
NOCACHE
NOPARALLEL;
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('3S TRANSPORT SERVICES', 'PC2319M', 'JALLT134PC7000044', TO_DATE('03/28/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('3S TRANSPORT SERVICES', 'PC2420C', 'JALLT134PC7000045', TO_DATE('03/28/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('3S TRANSPORT SERVICES', 'PC927X', 'JALLT134PB7000013', TO_DATE('02/11/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD1390L', 'JALFVR34P77000026', TO_DATE('03/14/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD1397T', 'JALFVR34P77000013', TO_DATE('03/14/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD1416Y', 'JALFVR34P77000014', TO_DATE('02/20/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD2076M', 'JALFVR34P77000043', TO_DATE('03/28/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD2473A', 'JALFVR34P87000001', TO_DATE('03/05/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD3610P', 'JALCYH52S97000008', TO_DATE('03/18/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD3642Y', 'JALCYZ52S97000002', TO_DATE('02/26/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD8025X', 'JALCYH52TD7000088', TO_DATE('03/25/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'YM3143L', 'JALFTR33P67000010', TO_DATE('02/14/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('800 SUPER WASTE MANAGEMENT PTE LTD', 'YM3365M', 'JALFTR33P67000007', TO_DATE('01/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'XD7855Z', 'JALEXR52ED7000066', TO_DATE('01/25/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN1518Y', 'JAANPR75HA7100847', TO_DATE('03/15/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN1869J', 'JALFVR347B7000045', TO_DATE('02/08/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN3166R', 'JAANHR85EB7100147', TO_DATE('01/11/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
(CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
Values
('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN3256P', 'JALFRR907B7000166', TO_DATE('01/18/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;
CREATE OR REPLACE FUNCTION concatenate
(p_key_name IN VARCHAR2,
p_key_value IN VARCHAR2,
p_col_to_concat IN VARCHAR2,
p_table_name IN VARCHAR2,
p_separator IN VARCHAR2 DEFAULT '*')
RETURN VARCHAR2
AS
TYPE weak_ref_cur IS REF CURSOR;
v_string VARCHAR2 (4000);
v_separator VARCHAR2 ( 3) := NULL;
v_value VARCHAR2 (4000);
v_cur weak_ref_cur;
BEGIN
OPEN v_cur FOR
'SELECT ' || p_col_to_concat
|| ' FROM ' || p_table_name
|| ' WHERE ' || p_key_name || ' = :a'
|| ' ORDER BY :b'
USING p_key_value, p_col_to_concat;
LOOP
FETCH v_cur INTO v_value;
EXIT WHEN v_cur%NOTFOUND;
v_string := v_string || v_separator || v_value;
v_separator := p_separator;
END LOOP;
CLOSE v_cur;
RETURN v_string;
END concatenate;
SELECT customer,
COUNT (CHS_NO) NOV,
MAX (DECODE (TO_CHAR (RO_DATE, 'MON'), 'JAN', VEHs)) AS "JAN",
MAX (DECODE (TO_CHAR (RO_DATE, 'MON'), 'FEB', VEHs)) AS "FEB",
MAX (DECODE (TO_CHAR (RO_DATE, 'MON'), 'MAR', VEHs)) AS "MAR"
FROM (SELECT CUSTOMER,
LIC_NO,
CHS_NO,
RO_DATE,
concatenate ('CUSTOMER || LIC_NO',
CUSTOMER || LIC_NO,
'LIC_NO',
'MSS_RETENTION')
AS VEHs
FROM MSS_RETENTION)
GROUP BY CUSTOMER;
My output
Customer Nov Jan Feb
800 SUPER WASTE MANAGEMENT PTE LTD 10 YM3365M YM3143L*XD1416Y*XD3642Y
like this for all the months.
|
|
|
|
Re: CONCATENATE QUERY [message #611787 is a reply to message #611784] |
Wed, 09 April 2014 00:15   |
kumarvk
Messages: 214 Registered: July 2004
|
Senior Member |
|
|
Hi,
My required output
Customer Nov Jan
800 SUPER WASTE MANAGEMENT PTE LTD 10 YM3365M
FEB
YM3143L*XD1416Y*XD3642Y.
I need the lic no in columnwise according to Jan, Feb, Mar etc. getting the month from RO_date
|
|
|
|
|
Re: CONCATENATE QUERY [message #611876 is a reply to message #611787] |
Wed, 09 April 2014 09:48   |
 |
Michel Cadot
Messages: 68737 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
kumarvk wrote on Wed, 09 April 2014 07:15Hi,
My required output
Customer Nov Jan
800 SUPER WASTE MANAGEMENT PTE LTD 10 YM3365M
FEB
YM3143L*XD1416Y*XD3642Y.
I need the lic no in columnwise according to Jan, Feb, Mar etc. getting the month from RO_date
Can you format your output and explain your output.
We can't even know if the first line is headers or part of the result and if it is headers which values are in which columns.
[Updated on: Wed, 09 April 2014 13:30] Report message to a moderator
|
|
|
Re: CONCATENATE QUERY [message #611884 is a reply to message #611783] |
Wed, 09 April 2014 10:29   |
Lalit Kumar B
Messages: 3174 Registered: May 2013 Location: World Wide on the Web
|
Senior Member |
|
|
I see that you have mentioned your Oracle DB version as 8i. If not too much too ask, is it not an outdated version in this 21st century.
I know that upgrading a system is not a developer's call, but you could definitely propose it to your organization.
The reason for saying that is, with latest Oracle DB version, specially 11g qmd above, you could use the string literal technique to build dynamic SQLs without the pain of all those quotes. And using DBMS_OUTPUT during your unit testing, you can easily see whether the SQL formed is syntactically correct or not.
Another thing, with respect to design and implementation, it's always the last option to choose dynamic SQL.
|
|
|
|
|
|
|
Re: CONCATENATE QUERY - Format text [message #611907 is a reply to message #611904] |
Thu, 10 April 2014 01:02  |
 |
Michel Cadot
Messages: 68737 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
Which one of your last 4 required outputs is the actual one?
You used code tags in your first post so you should be able to do it for your output.
Use "Preview" button BEFORE "Post" one to be sure of what you will actually post.
|
|
|
Goto Forum:
Current Time: Wed Mar 05 12:04:50 CST 2025
|