Multiple parameters one row for each record
I have this query I want the user to be able to allow the user to enter multiple MATL_CODE_MOD as a parameters, the problem is that the GURMAIL table have multiple records one for each GURMAIL_MATL_CODE_MOD, so it will give me duplicates.. How I can code this, so I can allow the user to enter multiple MATL_CODE_MOD codes, and have only one row for each record...
and GURMAIL_MATL_CODE_MOD in ('8IBC','8IBD')
select
spriden_id,
spbpers_name_suffix name_suffix,
spbpers_name_prefix name_prefix,
spriden_last_name last_name,
spriden_first_name first_name,
spriden_mi mi,
srbrecr_term_code,
srbrecr_majr_code,
srbrecr_program_1,
saturn_midd.utlq.f_matl_code_type(srbrecr_pidm)
FROM
saturn.srbrecr,
saturn.spriden,
saturn.spbpers,
SATURN.SPRADDR,
general.gurmail
WHERE
spriden_pidm = srbrecr_pidm
and gurmail_pidm = spriden_pidm
AND spriden_pidm = spraddr_pidm
--and srbrecr_term_code = decode(p_term ,'%',SRBRECR_TERM_CODE,p_term)
and spbpers_pidm = spriden_pidm
and spriden_change_ind is null
--and gurmail_matl_code_mod
and SRBRECR_PROGRAM_1 = 'CMQ'
and GURMAIL_MATL_CODE_MOD in ('8IBC','8IBD')
--AND SPRADDR_ATYP_CODE = 'CM'
AND SPRADDR_STREET_LINE1 IS NOT NULL;
Hi,
SELECT DISTINCT ...will keep duplicate rows out of the result set.
Depending on your data, another possibility might be to not join the table that contains GURMAIL_MATL_CODE_MOD. Do an EXISTS sub-query on that table instead.
If you need more help, post some sample data from all the tables, and the results you want from that data.
Simplify, if possible, You can probably post a problem with 2 or 3 tables, each with 2 or 3 columns, that will have the same answer.
Edited by: Frank Kulash on Apr 22, 2009 2:28 PM
Similar Messages
-
How can I have one row for each object?
Post Author: farnaz
CA Forum: WebIntelligence Reporting
I have 3 objcts that one of them is ID and second one is internal code and the third one is quantity.There is more than one value for each ID (becouse of internal code).I want to create a report based on ID and quantity (not based on internal code).I make a break on ID but the result shows me more than one row for each ID.so how can i have just one row for each ID?
another question:
how can I post screen shot of the results to my messag in forum?Post Author: jsanzone
CA Forum: WebIntelligence Reporting
farnaz:
Have you tried to omit "internal code" from your grid? In normal circumstances, if you have "ID" and "Quantity" on the grid, then WebI will on its own summarize Quantity based on ID, however, this is provided that Quantity has been set up as a measure (or metric). The quickest way to tell if Quantity is a metric or not is to observe the color of its icon when you look at it in the data panel. If it is a purple (or sometimes appears as pink or fuscia) dot, then it's a measure, but if it is a blue box then it is a dimension. If you need Quantity as a measure then this will have to be modified at the universe (make it look like "sum(Quantity)" in the select phase of the object, and insure the object is defined as a number.... -
Get only one row for each kind of a column
hi there!
i have a little problem.
I have a table with 10 columns. One of them has repeated values. My goal is to get all the rows with this column only one time for each values that it has.
Ex:
Col1 Col2 Col3
A A A
B B B
C A C
D C D
Column 2 has repeated values. My goal is to get:
A A A
B B B
D C D
Only one time each value of column 2.
Thanks guys! ;)SQL> CREATE TABLE Tbl (col1 VARCHAR2(1),col2 VARCHAR2(1),col3 VARCHAR2(1));
Table created.
SQL> INSERT INTO Tbl VALUES ('A','A','A');
1 row created.
SQL> INSERT INTO Tbl VALUES ('B','B','B');
1 row created.
SQL> INSERT INTO Tbl VALUES ('C','A','C');
1 row created.
SQL> INSERT INTO Tbl VALUES ('D','C','D');
1 row created.
SQL> commit;
Commit complete.
SQL> SELECT * FROM tbl t1
2 WHERE
3 rowid=(SELECT min(rowid)
4 FROM tbl t2
5 WHERE t1.col2=t2.col2);
C C C
A A A
B B B
D C D
SQL> SELECT * FROM tbl t1
2 WHERE
3 rowid=(SELECT max(rowid)
4 FROM tbl t2
5 WHERE t1.col2=t2.col2);
C C C
B B B
C A C
D C DEdited by: Saubhik on Aug 3, 2010 1:31 AM -
I need to fit 20 columns to page width and to do so, I need to print each record on 2 rows. It's something like:
Amt A Desc A Amt B Desc B ...
Amt C Desc C Amt D Desc D ...
999999 XXXXXX 999999 XXXXXXX
999999 XXXXXX 999999 XXXXXXX
999999 XXXXXX 999999 XXXXXXX
999999 XXXXXX 999999 XXXXXXX
Is this possible using Reports Builder?
MikeIf you use the Report Wizard, the wizard will automatically split the record in two (or more) lines if the line exceeds the paper width.
You can do it manually too, of course, and place the fields on two lines instead of one. -
Query for one row of each distinct column value
lets say theres table employee with columns name, id, and title. How do you get one row for each distinct title. Whatever row it is doesnt matter as long as your result set covers every possible employee title. How can I do this? thanks
Hi,
I think you're asking about a Top-N Query .
Since you didn't post a version of your table, I'll use scott.emp to illustrate.
The following query shows exactly one row of output for each distinct job:
WITH got_r_num AS
SELECT empno, ename, job
, ROW_NUMBER () OVER ( PARTITION BY job
ORDER BY ename
) AS r_num
FROM scott.emp
SELECT empno, ename, job
FROM got_r_num
WHERE r_num = 1
;Output:
` EMPNO ENAME JOB
7902 FORD ANALYST
7876 ADAMS CLERK
7698 BLAKE MANAGER
7839 KING PRESIDENT
7499 ALLEN SALESMANThe rows you see are actual rows from the table, not aggregates. That is, you can be certain that there is a row in the table with empno=7902, ename='FORD' and job='ANALYST'.
I hope this answers your question.
If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only), and also post the results you want from that data.
If the desired results are not unique, that is, if you'd be equally satisfied with a number of different result sets, then post a couple of examples from the same sample data. -
Filter Oldest Entry for Each Record
Post Author: Stephanie
CA Forum: Desktop Intelligence Reporting
I have a file that has multiple rows for each record, each with a different date. I would like to filter the report so that only the oldest entry for each record appears. Any suggestions? The report looks like this:
Record 1 01/01/07
Record 1 03/01/07
Record 1 05/01/07
Record 2 03/01/07
Record 2 05/01/07
Record 2 07/01/07
I would like the report to show this:
Record 1 01/01/07
Record 2 03/01/07
Thank you.Post Author: Stephanie
CA Forum: Desktop Intelligence Reporting
Thanks for the suggestion, but I had already tried that and I could not get it to work. I made a variable =Min(<Date>). When I removed the other date field, my report did look like this:
Record 1 01/01/07
Record 2 03/01/07
The problem is that there are other fields in the entry that I need to display as well. Let me rephrase what my original file looks like.
Record 1 01/01/07 Product A
Record 1 03/01/07 Product H
Record 1 05/01/07 Product K
Record 2 03/01/07 Product Z
Record 2 05/01/07 Product G
Record 2 07/01/07 Product H
I want the result to look like this:
Record 1 01/01/07 Product A
Record 2 03/01/07 Product Z
When I use the min formula, I can't figure out a way to get the product information from the original record as well. -
Displaying data in one row for for 2 tables without relaiton
I Have 2 tables without any relation and there is a common field and i want to display data like below
table refdet
1)
refdt----------refbr----refamt----refcat
10-aug-09---10-----34234-----101a
10-aug-009--11----23245-----102a
1-AUG-09----10----455.98----104A
19-aug-09-12-----10000-------103B
2) brdet
trdt---------brn-----brtot-----------brcat
11-aug09--10-----454000-------A
09-aug-09-12-----550000-------B
30-sep-09--10-----430000------A
09-aug-09-11-----550000-------B
i want to display data for each branch refdet.refbr = brdet.brn
refdet
Br10
refdt----------refbr----refamt----refcat-----trdt---------brn-----brtot-----------brcat
10-aug-09---10-----34234-----101a-------11-aug09--10-----454000-------A
1-AUG-09----10----455.98----104A------30-sep-09--10-----430000------A
Br 11
10-aug-009--11----23245-----102a -------09-aug-09-11-----550000-------B
Br12
19-aug-09-12-----10000-------103B------09-aug-09----12-----550000-------B
i tried the following query but its not working
select distinct null as refdt,null as refbr,null as refamt,null as refcat,b.trdt,b.brn,b.brtot,b.brcat
from brdet a,refdet b
where a.refbr (+) = b.brn
union all
select distinct a.refdt,a.refbr,a.refamt,a.refcat,null as trdt,null as brn,null as brtot,null as brcat
from brdet a,refdet b
where a.refbr = b.brn (+)
its not giving the records on each row for both side its creating separte rows for each records in both table.
rgds
jytohi
-Hi jytohi,
Please lean back for a moment and study your question. Ask yourself, is this a reasonable way to ask a question?
Jopefully you'll reach the answer, "No it isn't, I need to.."
1. Turn these
1)
refdt----------refbr----refamt----refcat
2) brdet
trdt---------brn-----brtot-----------brcatinto CREATE TABLE statements.
2. Turn these
10-aug-09---10-----34234-----101a
10-aug-009--11----23245-----102a
1-AUG-09----10----455.98----104A
19-aug-09-12-----10000-------103B
11-aug09--10-----454000-------A
09-aug-09-12-----550000-------B
30-sep-09--10-----430000------A
09-aug-09-11-----550000-------Binto INSERT INTO statements
3. Turn this
refdet
Br10
refdt----------refbr----refamt----refcat-----trdt---------brn-----brtot-----------brcat
10-aug-09---10-----34234-----101a-------11-aug09--10-----454000-------A
1-AUG-09----10----455.98----104A------30-sep-09--10-----430000------A
Br 11
10-aug-009--11----23245-----102a -------09-aug-09-11-----550000-------B
Br12
19-aug-09-12-----10000-------103B------09-aug-09----12-----550000-------Binto properly formatted expected output, along with a reasonable explanation of why
4. Turn this
select distinct null as refdt,null as refbr,null as refamt,null as refcat,b.trdt,b.brn,b.brtot,b.brcat
from brdet a,refdet b
where a.refbr (+) = b.brn
union all
select distinct a.refdt,a.refbr,a.refamt,a.refcat,null as trdt,null as brn,null as brtot,null as brcat
from brdet a,refdet b
where a.refbr = b.brn (+)into a properly formatted query
And last, put everything in into curly brackets {noformat}{noformat} to preserve formatting and blank space.
Best regards
Peter -
Comma separated column into rows for each value
experts,
I have a two column table. The second column has comma separated string values. How can I put the values separate for each comma separated and make one row for each value?
example,
column1 | StringColumn
s1 | test, joy, happy
s2 | USA, England, India
I want the result to be like below
column1 | StringColumn
s1 | test
s1 | joy
s1 | happy
s2 | USA
s2 | England
s2 | India
thanks in advance
ebroHello ebro,
See the following for a possible solution:
http://gallery.technet.microsoft.com/scriptcenter/Convert-Small-CSV-Value-to-ffc142ff
Olaf Helper
[ Blog] [ Xing] [ MVP] -
How to make RECORD for saving multiple rows for each employee..
Hi,
How can I create a record for saving multiple rows for each employee... (parent child relationship)
I have created all required fields, then created a record, and then created a page. in that page i dragged-n-dropped a scroll area on that page and dropped all required fields from record into that scroll-area.
whats is happening that its saving ONE (the first) record fine, but for the second record its not storing EMPLID for that row..
Will I have to make some change at RECORD level ?
OR Will i have to make some configuration in parent component ?Hi, the problem is solved. The record will be created in same way. just create more then one keys (allowing to make composite key in DB table)
-
Please help with an sql to show more than one records into single row for each student
From the following data I would like to create an sql to get the information as the following layout
studentid, firstTerm, EnglishMark1,ScienceMark1,MathsMark1, Secondterm,EnglishMark2,ScienceMark2,MathsMark2,
ThirdTerm,EnglishMark3,ScienceMark3,MathsMark3 // As single rows for each student
Example
1 First, 30,40,20,Sec,30,40,20, simillarly next row for next row for another sudent. Please help to generate the sql for the same.
Please help it would be very appreciate.
With Thanks
Pol
polachancreate table yourdata (studentid int, term varchar(10), section varchar(50), Mark int)
insert into yourdata values
(1,'First','Math',20),(1,'First','English',30),(1,'First','Science',40),
(2,'First','Math',20),(2,'First','English',30),(2,'First','Science',40),
(3,'First','Math',20),(3,'First','English',30),(3,'First','Science',40),
(1,'Sec','Math',20),(1,'Sec','English',30),(1,'Sec','Science',40),
(2,'Sec','Math',20),(2,'Sec','English',30),(2,'Sec','Science',40),
(3,'Sec','Math',20),(3,'Sec','English',30),(3,'Sec','Science',40)
Select studentid
,max(case when term='First' and section='English' Then Mark End) as EnglishMark1
,max(case when term='First' and section='Science' Then Mark End) as ScienceMark1
,max(case when term='First' and section='Math' Then Mark End) as MathMark1
,max(case when term='Sec' and section='English' Then Mark End) as EnglishMark2
,max(case when term='Sec' and section='Science' Then Mark End) as ScienceMark2
,max(case when term='Sec' and section='Math' Then Mark End) as MathMark2
,max(case when term='Third' and section='English' Then Mark End) as EnglishMark3
,max(case when term='Third' and section='Science' Then Mark End) as ScienceMark3
,max(case when term='Third' and section='Math' Then Mark End) as MathMark3
From yourdata
Group by studentid
drop table yourdata -
Display only one row for distinct columns and with multiple rows their valu
Hi,
I have a table having some similar rows for some columns and multiple different rows for some other columns
i.e
o_mobile_no o_doc_date o_status d_mobile_no d_doc_date d_status
9825000111 01-jan-06 'a' 980515464 01-feb-06 c
9825000111 01-jan-06 'a' 991543154 02-feb-06 d
9825000111 01-jan-06 'a' 154845545 10-mar-06 a
What i want is to display only one row for above distinct row along with multiple non distinct colums
ie
o_mobile_no o_doc_date o_status d_mobile_no d_doc_date d_status
9825000111 01-jan-06 'a' 980515464 01-feb-06 c
991543154 02-feb-06 d
154845545 10-mar-06 a
regards,
KumarRe: SQL Help
-
Hi there,
I am a beginner in Visual Basic Express 2010. I have a Point of Sale program that uses DataGridView to display records from an external microsoft access
database using the fillby query.
It works, but it repopulates the same row each time, but i want to be able to display multiple records at the same time, a new row should be filled for
each click of the fillby button.
also I want to be able to delete any records if the customer suddenly decides to not buy an item after it has already been entered.
so actually 2 questions here:
1. how to populate a new row for each click of the fillby button
2. how to delete records from data grid view after an item has been entered
Thanks
VishwasHello,
The FillBy method loads data according to what the results are from the SELECT statement, so if there is one row then you get one row in the DataGridView, have two rows then two rows show up.
Some examples
Form load populates our dataset with all data as it was defined with a plain SELECT statement. Button1 loads via a query I created after the fact to filter on a column, the next button adds a new row to the existing data. When adding a new row it is appended
to the current data displayed and the primary key is a negative value but the new key is shown after pressing the save button on the BindingNavigator or there are other ways to get the new key by manually adding the row to the backend table bypassing the Adapter.
The following article with code shows this but does not address adapters.
Conceptually speaking the code in the second code block shows how to get the new key
Public Class Form1
Private Sub StudentsBindingNavigatorSaveItem_Click(
sender As Object, e As EventArgs) Handles StudentsBindingNavigatorSaveItem.Click
Me.Validate()
Me.StudentsBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.MyDataSet)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'MyDataSet.Students' table. You can move, or remove it, as needed.
Me.StudentsTableAdapter.Fill(Me.MyDataSet.Students)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.StudentsTableAdapter.FillBy(Me.MyDataSet.Students, ComboBox1.Text)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.MyDataSet.Students.AddStudentsRow("Jane", "Adams", "Female")
End Sub
End Class
Get new key taken from
this article.
Public Function AddNewRow(ByVal sender As Customer, ByRef Identfier As Integer) As Boolean
Dim Success As Boolean = True
Try
Using cn As New OleDb.OleDbConnection With {.ConnectionString = Builder.ConnectionString}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn}
cmd.CommandText = InsertStatement
cmd.Parameters.AddWithValue("@CompanyName", sender.CompanyName)
cmd.Parameters.AddWithValue("@ContactName", sender.ContactName)
cmd.Parameters.AddWithValue("@ContactTitle", sender.ContactTitle)
cn.Open()
cmd.ExecuteNonQuery()
cmd.CommandText = "Select @@Identity"
Identfier = CInt(cmd.ExecuteScalar)
End Using
End Using
Catch ex As Exception
Success = False
End Try
Return Success
End Function
In closing I have not given you a solution but hopefully given you some stuff/logic to assist with this issue, if not perhaps I missed what you want conceptually speaking.
Additional resources
http://msdn.microsoft.com/en-us/library/fxsa23t6.aspx
Please remember to mark the replies as answers if they help and unmark them if they provide no help, this will help others who are looking for solutions to the same or similar problem. -
Lookup Data For Each Record of Result Set
I'm trying to determine if the following task is possible in BPEL and how to implement it.
Assume I have two DB Adapters returning data from two different databases.
The first excepts no inputs returns 5 records in a collection looking somewhat like the following.
Order ID, Item ID
1, 2
2, 1
3, 1
4, 2
5, 3
The second accepts an Item ID as input and returns the description for that item.
I would like the output of the BPEL Process to look like this.
Order ID, Item ID, Item Desc
1, 2, Computer
2, 1, Desk
3, 1, Desk
4, 2, Computer
5, 3, Lamp
I'm new to BPEL and I'm assuming this will involve invoking the first db adapter link and then iterator through the result set calling the second db adapter link for each record but I'm not sure where to start. I'm hoping someone can give me a simple example that I can play with. I've looked at How to iterate through multiple records read from a file adapter? and How to pass a single element in an array to XSL from BPEL but I'm getting lost.
ThanksI just got it working in the BPEL for-each loop by creating a variable of type Order which I then assigned the results from that loop and then appended them to my output variable. I'd be interested in seeing how I could do that within a transformation if its quicker. How do I append in a transformation so that I can add the row after each loop.
Here is the BPEL so far.
I will note that I think just fetching a complete copy of both data sources and merging wouldn't be ideal as my items table could contain a million records or more and I'm only wanting to fetch the ones I'm interested in.
Thanks
<?xml version = "1.0" encoding = "UTF-8" ?>
<!--
Oracle JDeveloper BPEL Designer
Created: Thu Dec 19 10:16:29 CST 2013
Author: shawn.c.weeks.ctr
Type: BPEL 2.0 Process
Purpose: Synchronous BPEL Process
-->
<process name="Lookup_Orders"
targetNamespace="http://xmlns.oracle.com/Order_Lookup/Sales_System/Lookup_Orders"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:client="http://xmlns.oracle.com/Order_Lookup/Sales_System/Lookup_Orders"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/db/Order_Lookup/Sales_System/get_orders"
xmlns:ns2="http://www.example.org"
xmlns:ns3="http://xmlns.oracle.com/pcbpel/adapter/db/top/get_orders"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
xmlns:ns4="http://xmlns.oracle.com/pcbpel/adapter/db/Order_Lookup/Sales_System/get_items"
xmlns:ns5="http://xmlns.oracle.com/pcbpel/adapter/db/top/get_items"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<import namespace="http://xmlns.oracle.com/Order_Lookup/Sales_System/Lookup_Orders" location="Lookup_Orders.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<!--
PARTNERLINKS
List of services participating in this BPEL process
-->
<partnerLinks>
<!--
The 'client' role represents the requester of this service. It is
used for callback. The location and correlation information associated
with the client role are automatically set using WS-Addressing.
-->
<partnerLink name="lookup_orders_client" partnerLinkType="client:Lookup_Orders" myRole="Lookup_OrdersProvider"/>
<partnerLink name="get_orders" partnerLinkType="ns1:get_orders_plt"
partnerRole="get_orders_role"/>
<partnerLink name="get_items" partnerLinkType="ns4:get_items_plt"
partnerRole="get_items_role"/>
</partnerLinks>
<!--
VARIABLES
List of messages and XML documents used within this BPEL process
-->
<variables>
<!-- Reference to the message passed as input during initiation -->
<variable name="inputVariable" messageType="client:Lookup_OrdersRequestMessage"/>
<!-- Reference to the message that will be returned to the requester-->
<variable name="outputVariable" messageType="client:Lookup_OrdersResponseMessage"/>
<variable name="Invoke1_get_ordersSelect_InputVariable"
messageType="ns1:get_ordersSelect_inputParameters"/>
<variable name="Invoke1_get_ordersSelect_OutputVariable"
messageType="ns1:OrdersCollection_msg"/>
<variable name="Invoke2_get_itemsSelect_InputVariable"
messageType="ns4:get_itemsSelect_inputParameters"/>
<variable name="Invoke2_get_itemsSelect_OutputVariable"
messageType="ns4:ItemsCollection_msg"/>
<variable name="Output_Row" element="ns2:OrderCollection"/>
</variables>
<!--
ORCHESTRATION LOGIC
Set of activities coordinating the flow of messages across the
services integrated within this business process
-->
<sequence name="main">
<!-- Receive input from requestor. (Note: This maps to operation defined in Lookup_Orders.wsdl) -->
<receive name="receiveInput" partnerLink="lookup_orders_client" portType="client:Lookup_Orders" operation="process" variable="inputVariable" createInstance="yes"/>
<!-- Generate reply to synchronous request -->
<invoke name="Invoke1" bpelx:invokeAsDetail="no" partnerLink="get_orders"
portType="ns1:get_orders_ptt" operation="get_ordersSelect"
inputVariable="Invoke1_get_ordersSelect_InputVariable"
outputVariable="Invoke1_get_ordersSelect_OutputVariable"/>
<forEach parallel="no" counterName="ForEach1Counter" name="ForEach1">
<startCounterValue>1</startCounterValue>
<finalCounterValue>count($Invoke1_get_ordersSelect_OutputVariable.OrdersCollection/ns3:Orders)</finalCounterValue>
<scope name="Scope1">
<sequence name="Sequence1">
<assign name="Assign2">
<copy>
<from>$Invoke1_get_ordersSelect_OutputVariable.OrdersCollection/ns3:Orders[$ForEach1Counter]/ns3:itemId</from>
<to>$Invoke2_get_itemsSelect_InputVariable.get_itemsSelect_inputParameters/ns5:item_id</to>
</copy>
</assign>
<invoke name="Invoke2" bpelx:invokeAsDetail="no"
partnerLink="get_items" portType="ns4:get_items_ptt"
operation="get_itemsSelect"
inputVariable="Invoke2_get_itemsSelect_InputVariable"
outputVariable="Invoke2_get_itemsSelect_OutputVariable"/>
<assign name="Assign3">
<copy>
<from>$Invoke1_get_ordersSelect_OutputVariable.OrdersCollection/ns3:Orders[$ForEach1Counter]/ns3:orderId</from>
<to>$Output_Row/ns2:Order/ns2:Order_ID</to>
</copy>
<copy>
<from>$Invoke1_get_ordersSelect_OutputVariable.OrdersCollection/ns3:Orders[$ForEach1Counter]/ns3:itemId</from>
<to>$Output_Row/ns2:Order/ns2:Item_ID</to>
</copy>
<copy>
<from>$Invoke2_get_itemsSelect_OutputVariable.ItemsCollection/ns5:Items[1]/ns5:itemDesc</from>
<to>$Output_Row/ns2:Order/ns2:Item_Desc</to>
</copy>
</assign>
<assign name="Assign4">
<extensionAssignOperation>
<bpelx:append>
<bpelx:from>$Output_Row/ns2:Order</bpelx:from>
<bpelx:to>$outputVariable.payload</bpelx:to>
</bpelx:append>
</extensionAssignOperation>
</assign>
</sequence>
</scope>
</forEach>
<reply name="replyOutput" partnerLink="lookup_orders_client" portType="client:Lookup_Orders" operation="process" variable="outputVariable"/>
</sequence>
</process> -
Getting the first row for each group
Hi Everyone,
I have a query which returns a number of rows, all of which are valid. What I need to do is to get the first row for each group and work with those records.
For example ...
client flight startairport destairport stops
A fl123 LGW BKK 2
A fl124 LHR BKK 5
B fl432 LGW XYZ 7
B fl432 MAN ABC 8
.... etc.
I would need to return one row for Client A and one row for Client B (etc.) but find that I can't use the MIN function because it would return the MIN value for each column (i.e. mix up the rows). I also can use the rownum=1 because this would only return one row rather than one row per group (i.e. per client).
I have been investigating and most postings seem to say that it needs a second query to look up the first row for each grouping. This is a solution which would not really be practical because my query is already quite complex and incorporating duplicate subqueries would just make the whole thing much to cumbersome.
So what I really new is a "MIN by group" or a "TOP by group" or a "ROWNUM=1 by group" function.
Can anyone help me with this? I'm sure that there must be a command to handle this.
Regards and any thanks,
Alan Searle
Cologne, GermanySomething like this:
select *
from (
select table1.*
row_number() over (partition by col1, col2 order by col3, col4) rn
from table1
where rn = 1In the "partition by" clause you place what you normally would "group by".
In the "order by" clause you define which will have row_number = 1.
Edit:
PS. The [url http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions004.htm#i81407]docs have more examples on using analytical functions ;-)
Edited by: Kim Berg Hansen on Sep 16, 2011 10:46 AM -
XML DB: is it possible to get a row for each element in a container element?
I have an XML document containing a container element (collection). If I query, using an XPath expression, the contained elements I get a row for each container element with the contained element concatenated. Is it possible to get a row for each contained element?
I run this simple query:
select extract(xmltype('<colors><color>Red</color><color>Green</color></colors>')
, '/colors/color/text()').getstringval() from dual
And get this result:
EXTRACT(XMLTYPE('<COLORS><COLOR>RED</COLOR><COLOR>GREEN</COLOR></COLORS>'),'/COL
RedGreen
1 row selected.
What I would like to have is:
Red
Green
2 rows selected.
Wishful thinking or possible? Many thanks!Sure. This is where our XMLSequence() function comes in. It allows you to treat the top-level nodes in a nodeset as if they were rows in a table when combined with the TABLE() operator. Here's an example.
First, to make the SQL look a little cleaner, I like to define a function like this:
create or replace function testdoc return xmltype as
begin
return xmltype('<colors><color>Red</color><color>Green</color></colors>');
end;.
To break out the nodeset of <color> elements as a table, we use the following query:
select value(list_of_color_elements).extract('*/text()').getStringVal() as color
from TABLE( XMLSequence( extract(testdoc(),'/colors/color'))) list_of_color_elements.
Or, using the new-in-9.2 extractValue() operator so we don't have to remember the text() part:
select extractValue( value(list_of_color_elements), '.') as color
from TABLE( XMLSequence( extract( testdoc() ,'/colors/color'))) list_of_color_elements.
Here the TABLE(XMLSequence(...)) combo produces a table of XMLType, with one XMLType object in each row of the table.
In general, if the XMLType instance were coming from an XMLType table xmltab the query would look like this:
select extractValue( value(colors), '.') as color
from xmltab x, /* Important that this table comes earlier in the FROM clause! */
TABLE( XMLSequence( extract( value(x),'/colors/color'))) colors.
And if the XMLType were instead in a column of XMLType named doc in a table xmltab, then we would have the syntax:
select extractValue( value(colors), '.') as color
from xmltab x, /* Important that this table comes earlier in the FROM clause! */
TABLE( XMLSequence( extract( x.doc ,'/colors/color'))) colorsOnce you get the hang of it, you'll see that the combination of TABLE(XMLSequence()) to "shred" XML nodes into rows, and XMLAgg() to aggregate fragments of XML across multiple rows back into a single document, is quite powerful.
Maybe you are looking for
-
How to Read Archived Messages in XI
HI I am facing problem in reading archived XI messages. i am trying to read messages archived in November. Can please anyone explain me how to read this. Thanks in Advance Regards Swapnil
-
Problem when calling session bean from main.
Hi everyone I get the following error when calling a session bean from main(String args[]). Sep 3, 2008 9:11:13 AM com.sun.enterprise.appclient.MainWithModuleSupport <init> WARNING: ACC003: Application threw an exception. java.lang.NullPointerExcepti
-
Do I need to buy an online number if I purchase Fr...
I am looking to buy the Freetalk Connect Me adaptar for my phone so I can call people I know on an ordinary phone. If I buy the hardware that comes with the year subscription for unlimited calls to US/Canada, do I also have to buy an online number to
-
Transfer a parameter to a physical table/view
Hi Is there is possibility to transfer a parameter from a request/dashboard to a view/table in the physical table. Meaning I want to pass variable that will hold dates and pass them directly to the table or view and the table will be filtered dynamic
-
Im not getting AD password expiration notices in Leopard
Has anyone else having problems getting AD password expiration notices in AD environments on Leopard Macs? It used to work for me in Tiger, but Im not getting the warnings when I log into Leopard Macs. Entourage warns me, but the Login window isn't p