convert the column to the SQL line
Hello worldI have table with 2 fields.
like;
F1 f2
x x 1
x x 2
x x 3
x x 4
y y1
Y2 y
y y3
y y4
I want to get the data in this table as;
F1 f2 f3 f4 f5
x x 1 x 2 x 3 x 4
y y1 y2 y3 y4
Thank you in advance.
user1516131 wrote:
I want to get the data in this table as;
I guess that x 1, x 2... is just an example and in reality, it can be any value. If Yes, you can use (and, as hoek said, it's a static solution):
with t as (
select 'x' f1, 'x1' f2 from dual union all
select 'x', 'x2' from dual union all
select 'x', 'x3' from dual union all
select 'x', 'x4' from dual union all
select 'y', 'y1' from dual union all
select 'y', 'y2' from dual union all
select 'y', 'y3' from dual union all
select 'y', 'y4' from dual
)
select f1,
f2,
f3,
f4,
f5
from (
select f1,
f2,
lead(f2) over(partition by f1 order by f2) f3,
lead(f2,2) over(partition by f1 order by f2) f4,
lead(f2,3) over(partition by f1 order by f2) f5,
row_number() over(partition by f1 order by f2) rn
from t
)
where rn = 1
/
F F2 F3 F4 F5
- -- -- -- --
x x1 x2 x3 x4
y y1 y2 y3 y4
SQL>
SY.
Tags: Database
Similar Questions
-
Convert the Sql for Oracle script
Could someone help me convert the sql script in oracle below
-- EXEC SP_smpAGENCY_MYWS_LAPSE_GET_USP_AMSurrenderMngtReport '2005','2010','09048','IL' ALTER PROCEDURE SP_smpAGENCY_MYWS_LAPSE_GET_USP_AMSurrenderMngtReport --DECLARE @StartYY AS VARCHAR(4), @EndYY AS VARCHAR(4), @AgentCode AS VARCHAR(9), @CompanyCode AS VARCHAR(4) AS DECLARE @ProfileYYYYMM AS VARCHAR(6), @SQLStr1 AS VARCHAR(8000),@SQLStr2 AS VARCHAR(8000), @SQLStr3 AS VARCHAR(8000) SET @ProfileYYYYMM = '201005' SET @SQLStr1 = '' SET @SQLStr1 = @SQLStr1 + ' DECLARE @CompAvgCount AS DECIMAL(38,2), @CompAvgAP AS DECIMAL(38,2), @CompInforceAP AS DECIMAL(15,2), @CompSurrenderAP AS DECIMAL(15,2), ' SET @SQLStr1 = @SQLStr1 + ' @CompInforceCount NUMERIC, @CompSurrenderCount NUMERIC,@ALCompInforceAP AS DECIMAL(15,2), @ALCompSurrenderAP AS DECIMAL(15,2), ' SET @SQLStr1 = @SQLStr1 + ' @ALCompInforceCount NUMERIC, @ALCompSurrenderCount NUMERIC,@ILCompInforceAP AS DECIMAL(15,2), @ILCompSurrenderAP AS DECIMAL(15,2), ' SET @SQLStr1 = @SQLStr1 + ' @ILCompInforceCount NUMERIC, @ILCompSurrenderCount NUMERIC ' SET @SQLStr1 = @SQLStr1 + ' DECLARE @tblAgentNumber TABLE ' SET @SQLStr1 = @SQLStr1 + ' ( ' SET @SQLStr1 = @SQLStr1 + ' [AgentName] VARCHAR(255), ' SET @SQLStr1 = @SQLStr1 + ' [AgentNumber] VARCHAR(9), ' SET @SQLStr1 = @SQLStr1 + ' [AgentRank] VARCHAR(10) ' SET @SQLStr1 = @SQLStr1 + ' ) ' SET @SQLStr1 = @SQLStr1 + ' DECLARE @tblmineInForce TABLE ' SET @SQLStr1 = @SQLStr1 + ' ( ' SET @SQLStr1 = @SQLStr1 + ' [company_code] VARCHAR(50), ' SET @SQLStr1 = @SQLStr1 + ' [mine_policy_no] VARCHAR(50), ' SET @SQLStr1 = @SQLStr1 + ' [Annl_premium] NUMERIC(28, 2) ' SET @SQLStr1 = @SQLStr1 + ' ) ' SET @SQLStr1 = @SQLStr1 + ' DECLARE @tblmineSurrender TABLE ' SET @SQLStr1 = @SQLStr1 + ' ( ' SET @SQLStr1 = @SQLStr1 + ' [company_code] VARCHAR(50), ' SET @SQLStr1 = @SQLStr1 + ' [mine_policy_no] VARCHAR(50), ' SET @SQLStr1 = @SQLStr1 + ' [Annl_premium] NUMERIC(28, 2) ' SET @SQLStr1 = @SQLStr1 + ' ) ' SET @SQLStr1 = @SQLStr1 + ' INSERT INTO @tblAgentNumber ' SET @SQLStr1 = @SQLStr1 + ' SELECT AgentName, AgentNumber, AgentRank ' SET @SQLStr1 = @SQLStr1 + ' FROM [SUMYOLAP0001].aetnaildb.dbo.agentprofile'+ @ProfileYYYYMM +' AgtProfile ' SET @SQLStr1 = @SQLStr1 + ' WHERE (LEN(agentnumber) = 5 and (left(agentnumber,1) between ''0'' and ''8'' or left(agentnumber,1) = ''A'')) ' SET @SQLStr1 = @SQLStr1 + ' AND (Amname not like ''%COMPANY%'' OR Amname not like ''%DIRECT%'' OR Amname not like ''%MARKETsmp%'') ' SET @SQLStr1 = @SQLStr1 + ' AND agencynumber not in (''ILS'',''PLS'',''99999'') ' SET @SQLStr1 = @SQLStr1 + ' AND LEFT(agencynumber,2) not in (''CD'',''DR'') AND LEFT(agencynumber,3) <> ''DIR'' ' SET @SQLStr1 = @SQLStr1 + ' AND RIGHT(RTRIM(agencynumber),2) not in (''CD'',''DR'') AND RIGHT(RTRIM(agencynumber),3) <> ''DIR'' ' SET @SQLStr1 = @SQLStr1 + ' AND companycode = ''IL'' ' SET @SQLStr1 = @SQLStr1 + ' INSERT INTO @tblmineSurrender ' SET @SQLStr1 = @SQLStr1 + ' SELECT company_code, mine_policy_no, Annl_premium ' SET @SQLStr1 = @SQLStr1 + ' FROM odsmine_policy ' IF @CompanyCode = 'All' BEGIN SET @SQLStr1 = @SQLStr1 + ' WHERE company_code IN (''IL'',''AL'') ' END ELSE BEGIN SET @SQLStr1 = @SQLStr1 + ' WHERE company_code IN ('''+ @CompanyCode +''') ' END SET @SQLStr1 = @SQLStr1 + ' AND cont_status = ''S'' ' SET @SQLStr1 = @SQLStr1 + ' AND YEAR(effective_date) BETWEEN '+ @StartYY +' AND '+ @EndYY +' ' SET @SQLStr1 = @SQLStr1 + ' SELECT @CompSurrenderCount = COUNT(1), @CompSurrenderAP = SUM(Annl_premium) ' SET @SQLStr1 = @SQLStr1 + ' FROM @tblmineSurrender S ' SET @SQLStr1 = @SQLStr1 + ' INNER JOIN odsagent_role R ' SET @SQLStr1 = @SQLStr1 + ' ON S.company_code = R.company_code ' SET @SQLStr1 = @SQLStr1 + ' AND S.mine_policy_no = R.mine_policy_no ' SET @SQLStr1 = @SQLStr1 + ' INNER JOIN @tblAgentNumber A ' SET @SQLStr1 = @SQLStr1 + ' ON R.servicsmpagent_code = A.AgentNumber ' SET @SQLStr1 = @SQLStr1 + ' INSERT INTO @tblmineInforce ' SET @SQLStr1 = @SQLStr1 + ' SELECT company_code, mine_policy_no, Annl_premium ' SET @SQLStr1 = @SQLStr1 + ' FROM odsmine_policy ' IF @CompanyCode = 'All' BEGIN SET @SQLStr1 = @SQLStr1 + ' WHERE company_code IN (''IL'',''AL'') ' END ELSE BEGIN SET @SQLStr1 = @SQLStr1 + ' WHERE company_code IN (''' + @CompanyCode + ''') ' END SET @SQLStr1 = @SQLStr1 + ' AND cont_status = ''I'' ' SET @SQLStr1 = @SQLStr1 + ' AND YEAR(effective_date) BETWEEN '+ @StartYY +' AND '+ @EndYY +' ' SET @SQLStr1 = @SQLStr1 + ' SELECT @CompInforceCount = COUNT(1), @CompInforceAP = SUM(Annl_premium) ' SET @SQLStr1 = @SQLStr1 + ' FROM @tblmineInforce I ' SET @SQLStr1 = @SQLStr1 + ' INNER JOIN odsagent_role R ' SET @SQLStr1 = @SQLStr1 + ' ON I.company_code = R.company_code ' SET @SQLStr1 = @SQLStr1 + ' AND I.mine_policy_no = R.mine_policy_no ' SET @SQLStr1 = @SQLStr1 + ' INNER JOIN @tblAgentNumber A ' SET @SQLStr1 = @SQLStr1 + ' ON R.servicsmpagent_code = A.AgentNumber ' SET @SQLStr1 = @SQLStr1 + ' SET @CompAvgCount = ROUND(ISNULL(@CompSurrenderCount,0) * 100 / ( ISNULL(@CompSurrenderCount,0) + @CompInforceCount),2) ' SET @SQLStr1 = @SQLStr1 + ' SET @CompAvgAP = ROUND(ISNULL(@CompSurrenderAP,0) * 100 / ( ISNULL(@CompSurrenderAP,0) + @CompInforceAP),2) ' SET @SQLStr1 = @SQLStr1 + ' DECLARE @tblODSmine_Policy TABLE ' SET @SQLStr1 = @SQLStr1 + ' ( ' SET @SQLStr1 = @SQLStr1 + ' [AgentName] VARCHAR(255), ' SET @SQLStr1 = @SQLStr1 + ' [AgentNumber] VARCHAR(9), ' SET @SQLStr1 = @SQLStr1 + ' [AgentRank] VARCHAR(10), ' SET @SQLStr1 = @SQLStr1 + ' [Company_Code] VARCHAR(4), ' SET @SQLStr1 = @SQLStr1 + ' [mine_Policy_No] VARCHAR(10), ' SET @SQLStr1 = @SQLStr1 + ' [Cont_Status] VARCHAR(1), ' SET @SQLStr1 = @SQLStr1 + ' [Annl_Premium] DECIMAL(15,2), ' SET @SQLStr1 = @SQLStr1 + ' [No_count] NUMERIC ' SET @SQLStr1 = @SQLStr1 + ' ) ' SET @SQLStr2 = 'INSERT INTO @tblODSmine_Policy ' SET @SQLStr2 = @SQLStr2 + ' SELECT DISTINCT AgtProfile.AgentName, AgtProfile.AgentNumber, ' SET @SQLStr2 = @SQLStr2 + ' AgtProfile.AgentRank,mine.company_code, mine.mine_policy_no, mine.cont_status, mine.Annl_Premium, 1.0 as no_count ' SET @SQLStr2 = @SQLStr2 + ' FROM @tblAgentNumber AgtProfile ' SET @SQLStr2 = @SQLStr2 + ' INNER JOIN [SUMYOLAP0001].aetnaildb.dbo.COMAGH COMAGH ' SET @SQLStr2 = @SQLStr2 + ' ON AgtProfile.AgentNumber = COMAGH.AHAGTN ' SET @SQLStr2 = @SQLStr2 + ' AND (AHAMNO = ''' + @AgentCode + ''' OR AHUMNO = ''' + @AgentCode + ''' OR AHAGNO = ''' + @AgentCode + ''') ' IF @CompanyCode = 'ALL' BEGIN SET @SQLStr2 = @SQLStr2 + ' AND AHCO IN (''AL'',''IL'') ' END ELSE BEGIN SET @SQLStr2 = @SQLStr2 + ' AND AHCO = ''' + @CompanyCode + ''' ' END SET @SQLStr2 = @SQLStr2 + ' INNER JOIN odsagent_role Role ' SET @SQLStr2 = @SQLStr2 + ' ON AgtProfile.AgentNumber = Role.servicsmpagent_code ' SET @SQLStr2 = @SQLStr2 + ' INNER JOIN odsmine_policy mine ' SET @SQLStr2 = @SQLStr2 + ' ON Role.company_code = mine.company_code ' SET @SQLStr2 = @SQLStr2 + ' AND Role.mine_policy_no = mine.mine_policy_no ' SET @SQLStr2 = @SQLStr2 + ' AND mine.cont_status IN (''S'',''I'') ' IF @CompanyCode = 'ALL' BEGIN SET @SQLStr2 = @SQLStr2 + ' AND mine.company_code IN (''AL'',''IL'') ' END ELSE BEGIN SET @SQLStr2 = @SQLStr2 + ' AND mine.company_code = ''' + @CompanyCode + ''' ' END SET @SQLStr2 = @SQLStr2 + ' AND YEAR(mine.effective_date) BETWEEN '+ @StartYY +' AND '+ @EndYY +' ' SET @SQLStr3 = 'SELECT AgentName, AgentRank, AgentNumber, ' SET @SQLStr3 = @SQLStr3 + ' CONVERT(INT,SUM(CASE WHEN cont_status = ''S'' THEN no_count ELSE 0 END)) AS Surrrender_Count, ' SET @SQLStr3 = @SQLStr3 + ' CONVERT(INT,SUM(CASE WHEN cont_status = ''I'' THEN no_count ELSE 0 END)) AS InForce_Count, ' SET @SQLStr3 = @SQLStr3 + ' SUM(CASE WHEN cont_status = ''S'' THEN Annl_premium ELSE 0 END) AS SurrenderAP, ' SET @SQLStr3 = @SQLStr3 + ' SUM(CASE WHEN cont_status = ''I'' THEN Annl_premium ELSE 0 END) AS InForceAP, ' SET @SQLStr3 = @SQLStr3 + ' CASE WHEN count(*) = 0 THEN 0 ELSE CONVERT(DECIMAL(38,2),(SUM(CASE WHEN cont_status = ''S'' THEN no_count ELSE 0 END) * 100 / count(*))) END AS AgtSurrenderCount, ' SET @SQLStr3 = @SQLStr3 + ' CASE WHEN SUM(Annl_premium) = 0 THEN 0 ELSE CONVERT(DECIMAL(38,2),(SUM(CASE WHEN cont_status = ''S'' THEN Annl_premium ELSE 0 END) * 100 / SUM(Annl_premium))) END AS AgtSurrenderAP, ' SET @SQLStr3 = @SQLStr3 + ' CONVERT(varchar(100),@CompAvgCount) AS CompAvgCount, ' SET @SQLStr3 = @SQLStr3 + ' CONVERT(varchar(100), @CompAvgAP) AS CompAvgAP ' SET @SQLStr3 = @SQLStr3 + ' FROM @tblODSmine_Policy ' SET @SQLStr3 = @SQLStr3 + ' GROUP BY AgentName, AgentRank, AgentNumber ' EXEC (@SQLStr1 + @SQLStr2 + @SQLStr3) --PRINT (@SQLStr1 + @SQLStr2 + @SQLStr3)
Yes.
1. the scrap code.
2. get the specification of the requirements of business origin.
3. learn PL/SQL.
4. write the PL/SQL code to meet the requirements of the company. -
Convert the SQL query to Oracle
Hi all
I have two SQL queries to create the table.
Query1.
CREATE TABLE [dbo]. [DocumentType] (
[DocType] [varchar] (20) GATHER SQL_Latin1_General_CP1_CI_AS NOT NULL,.
[SubCat] [varchar] (20) GATHER SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo]. [DocumentType] ADD
CONSTRAINT [PK_DocumentType] PRIMARY KEY CLUSTER
(
[DocType],
[SubCat]) ON [PRIMARY]
Query2.
CREATE TABLE [dbo]. [SBU] (
[SBU] [varchar] (51) GATHER SQL_Latin1_General_CP1_CI_AS NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo]. [SBU] ADD
[PK_SBU] CLUSTERED PRIMARY KEY CONSTRAINT
(
[SBU]
) ON [PRIMARY]
What will be the query in Oracle?
Please suggest!
Kind regards
ShahQuery1.
CREATE TABLE dbo. DocumentType)
DocType varchar2 (20) NOT NULL,
SubCat varchar (20) NOT NULL,
CONSTRAINT PK_DocumentType PRIMARY KEY (DocType, SubCat)
)
/Query2.
CREATE TABLE dbo. SBU)
SBU varchar2 (51),
CONSTRAINT PK_SBU PRIMARY KEY (UDF)
)
/It is useful for you?
Published by: insa on June 12, 2012 22:42
-
Hi all
I have this requirement to convert the JSON format in the result set (with the lines and columns).
is their in any case I can achieve this?
I was able to successfully convert the sql result set in JSON format but difficult time to do the reverse.
Flexibility:
At some point, I expect the lines to return no more than 2 & about 50 columns maximum.
Therefore, the JSON itself can be stored in varchar2 (4000) and not need to use CLOB. (If necessary to be passed as an argument to the function).
Oracle version: 11.2.0.3
Kind regards
AAG
There are at least the son on this site below:
https://community.Oracle.com/thread/2505918
https://community.Oracle.com/thread/3634280
-
4.0 EA1 - save the .sql in .pkb
If I have a .sql file (it happens to any .sql file) and try and save it as a .pkb through the spreadsheet editor (same choosing PL/SQL Source file as new Type), I get a save say error cannot convert the .sql file to the file .pkb.
It's used to work before.
Thank you
Paul
Post edited by: Trotty I think that what follows in the logging page can be linked: 194 SEVERE 0 org.openide.util.RequestProcessor error in oracle.ideimpl.db.ceditor.PlSqlGutterPlugin$ $1 1 RequestProcessor SERIOUS 1612870 193 oracle.javatools.db.plsql.PlSqlDerivedPropertyBuilder provider should not be null
Buggy as 17185264
P.S. The message is not related.
-
utils is a packege so should I use the SQL instead of utils.
Hello
everything in translating my MS in mssql to oracle is converted into code bit: utils
utils is a set I think so is it good to use it or do I find any equivenlent sql function.
so please tel me oracle sql function for utils.patindex ();
Yours sincerelyAn Oracle database is not delivered with a package called "utils". We have no idea what is this package. We do not know what it contains.
If someone in your organization or a tool that you use to convert the SQL Server T - SQL code to Oracle PL/SQL code created a package which simulates some T - SQL functions, you must determine if it is useful to use this package or using the built-ins Oracle. It may be wise to normalize the using the utils package if the hope is that the vast majority of the code will be converted by a tool and not touched by man so that there is consistency between the code base. It may be wise to normalize the Oracle built-in functions if the goal is to make easily understandable code for Oracle developers who do not know the T - SQL functions that are simulated. This isn't something that we can answer for you.
Justin
-
How can I change the first line of the table to a header row if it contains PGF with tblHead tags
So far, I have the following text in a JavaScript:
If (tbl. FirstRowInTbl.FirstCellInRow.FirstPgf.PgfFmt.Name = "tblHead")
{
If (tbl. FirstRowInTbl.RowType = 1).
1 is Constants.FV_ROW_BODY
tbl. FirstRowInTbl.RowType = 0;
0 is Constants.FV_ROW_HEADING
on the other
continue;
}
on the other
continue;
It does not work. I'm not comfortable with tbl. FirstRowInTbl.FirstCellInRow.FirstPgf.PgfFmt.Name.
It is clearly wrong. How I would I want to determine the tag of the first paragraph of the first line?
Any help is very appreciated!
Thank you
Ruth
Ruth, here is a function that converts the body lines to the header of a table lines. Please let me know if you have any questions or comments. -Rick
#target framemaker var doc = app.ActiveDoc; // Set a variable for the selected table. var tbl = doc.SelectedTbl; // Convert the first body row to a heading row. bodyToHeadingRow (tbl, 1, doc); function bodyToHeadingRow (tbl, num, doc) { var row = 0; // Select the top "num" rows in the table. tbl.MakeTblSelection (0, num - 1, 0, tbl.TblNumCols - 1); // Push the current clipboard contents and cut the selected rows. PushClipboard (); doc.Cut (Constants.FF_CUT_TBL_CELLS); // Add "num" number of heading rows to the table. row = tbl.FirstRowInTbl; row.AddRows (Constants.FV_Heading, num); // Select the new heading rows. tbl.MakeTblSelection (0, num - 1, 0, tbl.TblNumCols - 1); // Paste the rows from the clipboard into the new heading rows. doc.Paste (Constants.FF_REPLACE_CELLS); // Restore the clipboard contents. PopClipboard(); }
-
How to convert the lines into columns dynamically
HII
I have a 'report_line' with the following data table
location_code line_code value
LOC1 L1 12
loc2 L1 13
LOC1 L2 15
loc2 L3 11
LOC3 L1 9
Now I want the o/p by converting the line_codes in clumns as below
L1 L2 L3
LOC1 12 15
13 11 loc2
LOC3 9
How can I do this dynamically. Line codes are not constatnt, they can change for each scenario.
Thank you
SandeepI want just a sql for this query and no. columns ' maximum of are 6.
In this case you can do.
--sample data with t as ( select 'loc1' location_code, 'L1' line_code, 12 value from dual union all select 'loc2', 'L1', 13 from dual union all select 'loc1', 'L2', 15 from dual union all select 'loc2', 'L3', 11 from dual union all select 'loc3', 'L1', 9 from dual ) --end of sample data select location_code, max(decode(line_code, 'L1', value, null)) L1, max(decode(line_code, 'L2', value, null)) L2, max(decode(line_code, 'L3', value, null)) L3, max(decode(line_code, 'L4', value, null)) L4, max(decode(line_code, 'L5', value, null)) L5, max(decode(line_code, 'L6', value, null)) L6 from t group by location_code
Here I used the WITH clause as an example of table. You can replace the "t" table name in the select statement with your actual table and remove the WITH clause.
-
Convert the equivalent function stragg columns in oracle sql
Hello
Sorry I forgot my version of Oracle:
I searched on google but I have not found the solution.SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi PL/SQL Release 10.2.0.3.0 - Production CORE 10.2.0.3.0 Production TNS for 64-bit Windows: Version 10.2.0.3.0 - Production NLSRTL Version 10.2.0.3.0 - Production
I'm looking for a function equivalent to the SQL stragg discoverer.
Note: stragg function convert columns in lines.
Thank you
Published by: Salim champion 2010-01-29 08:32SELECT deptno, stragg ('-' || ename) FROM emp_test GROUP BY deptno; DEPTNO STRAGG_STR ---------- ------------------------------------------------------------ 10 -CLARK-KING-MILLER 20 -SMITH-FORD-ADAMS-SCOTT-JONES 30 -ALLEN-BLAKE-MARTIN-TURNER-JAMES-WARD 3 rows selected.
Hello Salim
This feature does not exist inside the discoverer.My suggestion would be to create a SQL function, then import it in Finder using the System Administration tool. Now, you will be able to pass the deptno to the function and the function returns a single string containing the concatenated names.
This isn't a function difficult to write and if you would like some help please let us know.
Best wishes
Michael -
How to display the columns in the wise line in pl sql
I have to display some values of constant wise online using the select statement. For example, after query both display constant columnwise...
Select 83: 42 double;
83 42
I want to display the rowwise... IE
Constant
83
42
I can create temporary table and add them then ask, but there should be a way I can use double to show the values line wise. something like
Select a double where an in (83, 42)
Appreciate your help.Hello
Here's one way:
SELECT column_value AS cnstnt FROM TABLE (sys.odcinumberlist (83, 42)) ;
CONSTANT is a keyword from Oracle is not a very good name for your own column.
-
SQl query to find out time between the different lines of transactions
(See both images from an attachment to get the clear picture of the data and understand the question correctly.)
I have a set of data like this in one of my paintings. (This is a simple representation of the original data.)
Reference table1.jpg
Id | Type | Value | Start_date | End_date
----------------------------------------------------------------------------------------------------------------------
ZTR0098 | ALLOW | 0 | 1 JUN | 2 JUN |
ZTR0098 | ADTAX | 0 | 1 JUN | 2 JUN |
ZTR0098 | MXTAX | 0 | 1 JUN | 9 JUN |
ZTR0098 | ALLOW | 4. 3 JUN | 15 JUN |
ZTR0098 | ADTAX | 44.00 | 3 JUN | 17-JUNE |
ZTR0098 | MXTAX | 2. 10 JUN | 17-JUNE |
ZTR0098 | ALLOW | 5. 16-JUNE | 20 JUN |
ZTR0098 | ADTAX | 55,34 | 18 JUN | 22 JUN |
ZTR0098 | MXTAX | 1. 18 JUN | 25 JUN |
ZTR0098 | MXTAX | 6. 26 JUN | 31 AUG |
ZTR0098 | ADTAX | 20.09. 23 JUN | 23 JUL |
ZTR0098 | ALLOW | 8. 21 JUN | 31 AUG |
ZTR0098 | ADTAX | 45. 24 JUL | 31 AUG |
each line has a type and a rasthaus id to it. ID belongs to other parent tables. the value of each type is given, and the validity of each value is followed by a field start_date and end_date.
All values start from 1 - JUN and expires on 31 - AUG. Now my requirement is to obtain a report that gives three columns for three different types (ALLOW, ADTAX and MXTAX) with combination of unique values in the effective time interval. Let me put the result below.
Reference table2.jpg
Id | ALLOW | ADTAX | MXTAX | Start_date | End_date
--------------------------------------------------------------------------------------------------------------------------------------------------
ZTR0098 | 0 | 0 | 0 | 1 JUN | 2 JUN |
ZTR0098 | 4. 44.00 | 0 | 3 JUN | 9 JUN |
ZTR0098 | 4. 44.00 | 2. 10 JUN | 15 JUN |
ZTR0098 | 5. 44.00 | 2. 16-JUNE | 17-JUNE |
ZTR0098 | 5. 55,34 | 1. 18 JUN | 20 JUN |
ZTR0098 | 8. 55,34 | 1. 21 JUN | 22 JUN |
ZTR0098 | 8. 20.09. 1. 23 JUN | 25 JUN |
ZTR0098 | 8. 20.09. 6. 26 JUN | 23 JUL |
ZTR0098 | 8. 45. 6. 23 JUL | 31 AUG |
As you can see there are no duplicate rows for a combination of (ALLOW, ADTAX and MXTAX) with their respective dates in force. resulting in the above table. the first step is to convert lines to the column which is pretty obvious to do that by grouping on start_date and end_date colum, but the real deal is the time interval during which the combination of the values (ALLOW, ADTAX, and MXTAX) has remained constant.
I wrote under query using Group by.
Select
ID,
NVL (max (decode (type, "ALLOW", value)), 0) as ALLOW
NVL (max (decode (type, 'ADTAX', value)), 0) as ADTAX
NVL (max (decode (type, 'MXTAX', value)), 0) as MXTAX
Start_date,
End_date
from my_table
Group of start_date, end_date, id
start_date, end_date
the results it gives are like this:
Reference table3.jpg
Id | ALLOW | ADTAX | MXTAX | Start_date | End_date
------------------------------------------------------------------------------------------------------------------------------------------------
ZTR0098 | 0 | 0 | 0 | 1 JUN | 2 JUN |
ZTR0098 | 0 | 0 | 2. 1 JUN | 9 JUN |
ZTR0098 | 4. 0 | 0 | 3 JUN | 15 JUN |
ZTR0098 | 0 | 44.00 | 0 | 3 JUN | 17-JUNE |
ZTR0098 | 0 | 0 | 2. 10 JUN | 17-JUNE |
ZTR0098 | 5. 0 | 0 | 16-JUNE | 20 JUN |
ZTR0098 | 0 | 55,34 | 0 | 18 JUN | 22 JUN |
. .
. .
like wise
but I'm not able to determine the time intervals by using the SQL query.
with
Table1 as
(select the id 'ZTR0098', 'ALLOW' type, 0 val, to_date('1-JUN','dd-MON') start_date, end_date Union to_date('2-JUN','dd-MON') double all the)
Select 'ZTR0098', 'ADTAX', 0, to_date('1-JUN','dd-MON'), to_date('2-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'MXTAX', 0, to_date('1-JUN','dd-MON'), to_date('9-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'ALLOW', 4, to_date('3-JUN','dd-MON'), to_date('15-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'ADTAX', 44.00, to_date('3-JUN','dd-MON'), to_date('17-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'MXTAX', 2, to_date('10-JUN','dd-MON'), to_date('17-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'ALLOW', 5, to_date('16-JUN','dd-MON'), to_date('20-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'ADTAX', 55.34, to_date('18-JUN','dd-MON'), to_date('22-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'MXTAX', 1, to_date('18-JUN','dd-MON'), to_date('25-JUN','dd-MON') of all the double union
Select 'ZTR0098', 'MXTAX', 6, to_date('26-JUN','dd-MON'), to_date('31-AUG','dd-MON') of all the double union
Select 'ZTR0098', 'ADTAX', 20.09, to_date('23-JUN','dd-MON'), to_date('23-JUL','dd-MON') of all the double union
Select 'ZTR0098', 'ALLOW', 8, to_date('21-JUN','dd-MON'), to_date('31-AUG','dd-MON') of all the double union
Select 'ZTR0098', 'ADTAX', 45, to_date('24-JUL','dd-MON'), to_date('31-AUG','dd-MON') of the double
),
days like
(select level - 1 dte + to_date('1-JUN','dd-MON')
of the double
connect by level<= to_date('31-aug','dd-mon')="" -="" to_date('1-jun','dd-mon')="" +="">=>
)
Select id, allow, adtax, mxtax, min (dte) start_date, max (dte) end_date
(select ID, dte, max (allow) allow, max (adtax) adtax, max (mxtax) mxtax,
ROW_NUMBER() over (order by dte) row_number() - courses (partition by order max (allow), max (adtax), max (mxtax) by dte) gr
go (select id, dte,
-case when type = 'ALLOW' and dte between start_date and end_date then end val 0 otherwise allow.
-case when type = "ADTAX" and dte between start_date and end_date then val 0 otherwise end adtax.
-case when type = "MXTAX" and dte between start_date and end_date then val 0 otherwise end mxtax
Table 1 t,
days d
where d.dte between t.start_date and t.end_date
)
Group by id, dte
)
Group by id, gr, allow, adtax, mxtax
order by id, gr
ID ALLOW ADTAX MXTAX START_DATE END_DATE ZTR0098 0 0 0 01/06/2015 02/06/2015 ZTR0098 4 44 0 03/06/2015 09/06/2015 ZTR0098 4 44 2 10/06/2015 15/06/2015 ZTR0098 5 44 2 16/06/2015 17/06/2015 ZTR0098 5 55,34 1 18/06/2015 20/06/2015 ZTR0098 8 55,34 1 21/06/2015 22/06/2015 ZTR0098 8 20.09 1 23/06/2015 25/06/2015 ZTR0098 8 20.09 6 26/06/2015 23/07/2015 ZTR0098 8 45 6 24/07/2015 31/08/2015 Concerning
Etbin
-
How to convert the column of ROW using DBMS_REDIFINITION object type column
Hi all
Suppose I have the following table to convert:
I created the table based on the customers of the OE schema table, while the street column has cust_address_typ with the following attribute object typecreate table customer as select customer_id cid, cust_first_name name, cust_address street from customers; alter table customer modify cid primary key;
I want to convert the object attribute adresse_rue in a column of RDM. Consider the following temporary table:SQL> describe cust_address_typ Name Null? Type ----------------------------------------------------- -------- ------------------------------------ STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(10) CITY VARCHAR2(30) STATE_PROVINCE VARCHAR2(10) COUNTRY_ID CHAR(2)
First of all, I checked if the table can be redefined:CREATE TABLE INT_CUSTOMER( CID NUMBER, NAME VARCHAR2(30), street varchar2(100) );
But when I started the redefinition, I got an error:--Verify if the table can be redefined BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE('OE','CUSTOMER',DBMS_REDEFINITION.CONS_USE_PK); END; 4 / PL/SQL procedure successfully completed.
What seemed to be the problem?BEGIN DBMS_REDEFINITION.START_REDEF_TABLE( uname => 'OE', orig_table => 'CUSTOMER', int_table => 'INT_CUSTOMER', col_mapping => 'CID CID, NAME NAME, STREET CUST_ADDRESS_TYP(STREET_ADDRESS)' ); END; 9 / BEGIN * ERROR at line 1: ORA-00923: FROM keyword not found where expected ORA-06512: at "SYS.DBMS_REDEFINITION", line 52 ORA-06512: at "SYS.DBMS_REDEFINITION", line 1646 ORA-06512: at line 2
Best regards
Val
Published by: Valerie good-natured October 9, 2011 21:43Have you tried this one:
BEGIN DBMS_REDEFINITION.START_REDEF_TABLE( uname => 'OE', orig_table => 'CUSTOMER', int_table => 'INT_CUSTOMER', col_mapping => 'CID CID, NAME NAME,"CUSTOMER".STREET.STREET_ADDRESS STREET' ); END;
Looking at your trace file, I claim that when you use the call above to START_REDEF_TABLE, the inner workings of this procedure will create this SQL statement:
select CID CID, NAME NAME,"CUSTOMER".STREET.STREET_ADDRESS STREET from "OE"."CUSTOMER" "CUSTOMER"
(You can prove or disprove my claim by tracing it ;-)))
And this statement has had an alias - even if the alias is the same as the name of the table...
-
Column of the row on a table (using the SQL query)
Data in my table looks like this.
Data in the table
===============
COL_1, COL_2
---------- ----------
1 ABCD
2 ABC
3 ABCDE
4 AB
5 ABCDEFGH
Now, he must, for the entire line, length COL_2 text exceeds 3, display the text remaining in the new line. For example, the first row (COL_1 = 1), COL_2 length is 4, so in SQL output two lines will be displayed as shown below. Also, the last row (COL_1 = 5), the length is 8, then, in SQL, output 3 lines will be displayed as below. And for the COL_1 = 2 & 4, only 1 rank will be displayed as the text COL_2 length is less than or equal to 3.
OUTPUT
===============
COL_1, COL_2
---------- ----------
1 ABC
1 D
2 ABC
ABC 3
3 DE
4 AB
5 ABC
5 DEF
5 GH
We need to implement using SQL only.
Hello
the solution of etbin uses recursive subquery factoring available on Oracle 11 g 2.
Since you have not mentioned your version I write here 2 alternatives using CONNECT BY and Xquery:
with mydata as
(
Select 1 c1, c2 'ABCD' Union double all the
Select 2, 'ABC' from dual union all
Select 3, 'ABCDE' from dual union all
Select option 4, "AB" dual union all
Select 5, "ABCDEFGH" of the double
)
Select c1, substr (c2, level * 3-2, 3) C2
of mydata
connect by substr (c2, level * 3-2, 3) is not null
and c1 = c1 prior
and prior dbms_random.random is not null;
C1 C2
---------- ---
1 ABC
0%
2 ABC
ABC 3
3
4 AB
5 ABC
5 DEF
5 GH
9 selected lines.
with mydata as
(
Select 1 c1, c2 'ABCD' Union double all the
Select 2, 'ABC' from dual union all
Select 3, 'ABCDE' from dual union all
Select option 4, "AB" dual union all
Select 5, "ABCDEFGH" of the double
)
Select a.c1, x.c2
of mydata one
, xmltable ("ora: tokenize($c2,",")")
passing regexp_replace (a.c2, '(.{1, 3}) \1 ',',') as "c2".
path of columns c2 varchar2 (30) '.'
) x
where x.c2 is not null;
C1 C2
---------- ------------------------------
1 ABC
0%
2 ABC
ABC 3
3
4 AB
5 ABC
5 DEF
5 GH
9 selected lines.
Edit: corrected the Xquery solution using a simplified regexp_replace.
Kind regards.
Alberto
-
How to get line numbers to display on the SQL worksheet?
Dear Forum,
I learn the SQL Developer. I use it in my work and school. At school, when I enter a query in the SQL worksheet, line numbers show in a column to the left of the editing area. In my work, no line number. I'm working on a fairly long query at my work, and the line numbers would be useful.
I looked at tools / preferences / settings for the Code Editor, but do not find a setting for line numbers. I looked at the other tabs in preferences and found nothing that looked useful.
I have looked at all of the choices on the display list, but can't find anything on line numbers.
Am I missing something obvious? Line numbers is also available? If so, how?
I looked at various hits "line number" in this forum, but I've not found anything exactly the point.
Beverly
PS Oracle 11g, SQL Developer 3.0.04, Linux x 86-64 (don't have version)
Tools-> preferences /-> Code Editor-> line gutter
-
Return the first line with a non-null value in a column
Hey there, gurus. Can someone give me a hand with this?
I have a table with six columns: Class_ID, Course_ID, start_date, Last_Name, First_Name, company. When our students take a class and will fill in an evaluation form, they fill in the Class_ID Last_Name First_Name, and Company. The Course_ID and Start_Date are filled automatically based on the Class_ID.
I am trying to generate a report that contains Class_ID, Course_ID and Start_Date, PLUS the value of the first not null in the column of company for a combination given to the three first columns. Here is my SQL that does not quite do the trick:
Select distinct c.class_id, c.course_id, c.start_date, p.company
class c, person p, student s
where substr (c.course_id, 1, 3) = "OBI".
and c.start_date > = SYSDATE-30
and c.class_id = s.class_id
and s.pid = p.pid
order start_date, company, class_id, course_id
At present, if in a given class, a student entered "CCCC" under the name of the company and another entry "Collin Co Comm Coll" and another between "Collin College", I would get three rows of this class when you use the SQL above. I want just one line. I don't really like which company names gets selected - one of them will be great for our needs. I just need to see a line for each class_id and single value that some students entered the area of the company. And I guess I have to say that if no student fills in the name of the company I need to see the value null, because I need to see the line no matter what.
Looks like some sort of funky outer join or a coalesce, but it is beyond my ability to understand.
Now I get this:
During class 1234 SQL271 Date 22/07/2013 company XYZ Inc.
Made up of class 1234 SQL271 Date 22/07/2013 company XYZ
1234 SQL271 Date 22/07/2013 company XYZ, class
What I want:
Class 1234 SQL271 22/07/2013 Date course XYZ Inc. or one of the other 2
Thanks in advance!select c.class_id, c.course_id, c.start_date, max(p.company) company from class c, person p, student s where substr(c.course_id,1,3) = 'OBI' and c.start_date >= SYSDATE-30 and c.class_id = s.class_id and s.pid = p.pid group by c.class_id, c.course_id, c.start_date order by class_id, start_date, course_id
Or if you want to list all businesses, you can use LISTAGG if you're on the latest version of ORACLE
Maybe you are looking for
-
Satellite Pro 480cdt: USB ports do not work with Windows XP
Hi friends. I install xp window in my laptop, now I can not install any material thanks to a port USB flash drive IE, wireless modem, camera
-
I need a new product key to move from a 32 to a 64-bit operating system in windows XP plan pro.i hdwr upgrade to 64-bit and want to keep the same operating system.
-
After reformat Windows XP, I lost sound and shows no sound card or drivers on computor.
Windows XP SP3 motherboard - ASUSTEC Computor Inc., model #Amberine M, On41411-version RE101Ambem000
-
Cannot delete a file and folder
I am trying to delete a file and folder but his always showing me the attached message. Please see the attached screenshot.
-
How to push the second screen?
Hello I am writing an application in which I'm trying to push a second display to a custom in the first menu item. The first screen is pushed successfully and the custom menu items are filled with a bluetoothserialportlistener. Once I click on a spec