CRXI: Formula To Loop Through Formulas in Group

Post Author: Mile
CA Forum: Formula
I have a hierarchy of groups allowing the drilldown of data. Due to a flaw in database design, there is no real join between two tables and I've improvised as best I can. The problem is that on one of my items, there can be as many as thirteen products attributed to it. This produces thirteen records for the one item, meaning that summing on the amount field will be thirteen times the actual amount. But, as I said, each product may have a different number of products attributed to it, meaning it could be five times the amount, seven times, the amount, etc.
I've been able to make a summary at the item level whereby all I need to do is a formula that divides the sum by the count of products to get the actual value. When I move to the next group level up, I find that it can't mathematically be done to divide the summed amount because one item in the group may have two products (therefore two records) and another ten products.
What I'm wondering is whether there is a way, using a formula, that can loop through all the items in a group and add the summary field.
i.e.
ITEM1 - PROD1 - $5
ITEM1 - PROD2 - $5
ITEM2 - PROD1 - $7
ITEM2 - PROD2 - $7
ITEM2 - PROD3 - $7
ITEM2 - PROD4 - $7
ITEM2 - PROD5 - $7
ITEM1 would summarise to $5, once I've divided it by two. ITEM2 would summarise to $7, once I've divided it by five.
So, ideally, I would loop through a group above the item level, adding the summaries, ending with $12.
Can this be done?

Post Author: synapsevampire
CA Forum: Formula
Your difficulty is termed record or row inflation.
If you want a summary at the group level, group by the item field and use a maximum instead of a sum.
maximum({table.value},{table.item})
Then to get a grand total, create a formula such as the following for the gropup footer:
whileprintingrecords;numbervar MyTotal;MyTotal := MyTotal + {table.value}
Now you can display the grand total in a subsequent secion using:
whileprintingrecords;numbervar MyTotal
-k

Similar Messages

  • Formula by Group and based on a condition

    Post Author: Ravi
    CA Forum: Formula
    Hi All,
    I need to create a formula by Group and based on a condition. Below the syntax is wrong but this is the calculation that I am after!
    Sum({@Test_Dollars}, ) where {Customer Number} = 12
    Basically, I need to display/calculate the 2nd column in the sample report/output.
                      All Customers                    Only  Customer 12
    Company    $500                                  $125    
        Zone A  $200                                   $50
       Zone B   $300                                   $75
    Thanks in advance,
    Ravi

    Post Author: Jagan
    CA Forum: Formula
    I think you should be able to get this from a running total with a formula to only include records where the customer number - 12

  • Fastest way to loop through a group of strings

    I am trying to optimize a small class that loops through an array of strings and compares to see if another string equals one of the values, for example:
    String test = "this is test5";
    String array[] = {"test1","test2","test3, test4,test5,test6,test7,test8"};
    for(int i = 0;i < array.length; i++)
    if (test.endsWith(array))
    return array[i];
    }The array that I am using holds closer to 15 values, but this loop can be hit thousands of times a day.  My  question is, are there any faster ways to loop through multiple strings than using arrays?  How do array lists or maps compare?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    sarcasteak wrote:
    The array that I am using holds closer to 15 values, but this loop can be hit thousands of times a day. 15,000 comparisons a day is nothing. The following code does 15 million String compares in 188 ms.
    public class StrCmp {
      public static void main(String... args) {
        String[] arr = {"abc", "sdfasdlfkjasldfjalsdkfj", "234l2kjala34kh", "slkfjal3490u saf",
                        "234lkjasldfhk23k4jhasf", "23l4kjsf", "alsflsdjkf", "aslkdfajsdf3h", "zzzzz",
                        "uhuhuhuhuh", "uhu2huh234234", "n234aoiuf", "234lasdhvoaih3", "zoziucvoiu", "asdflsjfl"};
        long start = System.currentTimeMillis ();
        for (int i = 0; i < 1000000; i++) {
          String str = "qqq";
          for (String str2 : arr) {
            if (str2.endsWith (str)) {
              System.out.println ("match");
        long end = System.currentTimeMillis ();
        System.out.println((end - start) + " millis");
    My question is, are there any faster ways to loop through multiple strings than using arrays? How do array lists or maps compare?Before you worry about taking something simple that works and complicating it to make it faster, make sure there's a reason to do so.
    If you do in fact need to make it faster, there are several different things you could do, but which one is best depends on a number of factors specific to your particular requirements and use cases.

  • Looping through all the Nodes at any Particular Level Specified

    Dear Forum Members,
    I have an XML File in the database in a Column of type XMLTYPE.
    The Format is given below
    <XML-SSDFILELIST>
    <Training>
    <BRKCD_STMNSWTINVIN_C Key="6707">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </BRKCD_STMNSWTINVIN_C>
    <BRKCD_STREDSWTINVIN_C Key="6708">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </BRKCD_STREDSWTINVIN_C>
    <VSACD_TIPER_C Key="7285">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSACD_TIPER_C>
    <VSSCD_NTHRESPLA_C Key="6266">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSSCD_NTHRESPLA_C>
    <VSSCD_QTHRESPLA_C Key="6267">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSSCD_QTHRESPLA_C>
    <VSSCD_VDFL_C Key="6269">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSSCD_VDFL_C>
    <VSSCD_VMAX_C Key="6270">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSSCD_VMAX_C>
    <VSSCD_VMIN_C Key="6271">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSSCD_VMIN_C>
    <VSSCD_VTHRESPLA_C Key="6272">
    <FINISHED><![CDATA[This is a Finished data ]]></FINISHED>
    <CONTACT-NUMBER><![CDATA[This is a CONTACT-NUMBER data ]]></CONTACT-NUMBER>
    <DEFAULT></DEFAULT>
    <MIN></MIN>
    <MAX></MAX>
    <UNIT></UNIT>
    <FORMULA></FORMULA>
    <FORMULA-DESC></FORMULA-DESC>
    <ADVANCED-FORMULA></ADVANCED-FORMULA>
    <INTERNAL-ADAPT-DESC></INTERNAL-ADAPT-DESC>
    <DATA-DESC-REPORT></DATA-DESC-REPORT>
    <REV-DESC></REV-DESC>
    </VSSCD_VTHRESPLA_C>
    </Training>
    </XML-SSDFILELIST>
    Is there any way I can Loop through all the Child records at 3rd Level(Bolded Level in the File).
    Regards
    Madhu.

    check this blog,
    http://www.oracleappshub.com/11i/oracleapps-responsibility-vs-sap-functions/
    Re: How to change OM responsibility as read-only in oracle applications 11i
    read only responsibility-user

  • Looping through the resultset

    Post Author: Swapna
    CA Forum: Formula
    Hi
      I need to loop through the result set how would i do that here is my scenario
    in the database i have total 10 columns say an example
    a,b,c,d,e,f,g,h,i,j,k and assume i have 100 rows with allthese values in the database now for these 100 rows i have to calculate the summary of those columns and i have written formula something like this but it was not working it was giving me zero dont know plz advise on this
    whileprintingrecords;
    numbervar totalsum;
    totalsum=totalsum((a-b)/100cdefghi-j-k);
    and i want to display this sum in my detail section of report how would i do that
    I Appreciate your help.

    Post Author: SKodidine
    CA Forum: Formula
    Try this and see if you get any results.
    totalsum=totalsum((a-b)/100cdefghi-j-k);
    totalsum := totalsum((a-b)/100cdefghi-j-k);

  • Question on how to loop through a variable amount of objects

    I have a csv file which I am parsing with powershell and it works perfectly. I would like to speed it up. Currently, I call a line that is customized for each groups list of subnets.
    I have about 30 groups.
    Some groups have one subnet, some have 5 subnets.
    I want to set up some sort of loop to parse everything while executing a single Import-CSV. Currently I call Import-CSV once per group. It takes me about 2-4 minutes to parse the entire file depending on the speed of the machine.
    The csv file has about 30,000 rows. I am not concerned about running out of resources. This is as much a learning challenge as a desire to make better powershell scripts.
    Below is a portion of the one liner that would parse the entire csv file looking only for those items that match, and writing them out to that groups specific csv file.
    Example #1
    Import-Csv $HostList |  Where-Object {$_."IP Address" -Match "^192.1.*" -or $_."IP Address" -Match "^192.2.*" -or $_."IP Address" `-Match "^192.3.*"  .....}| do more stuff...
    Example #2
    Import-Csv $HostList |  Where-Object {$_."IP Address" -Match "^192.7.*" ....}| do more stuff...
    The example above is just a snippet from code that works perfectly.
    The problem I am asking for help with is, when I loop through the items I am matching against (subnets), if one group has 3 items to match against, another has 1, another has 7, how do I set up such a loop?
    Am I using some sort of 'while'  $_."IP Address" or...?
    Do I create a big 30,000 array (Does PS even use arrays?)
    I would love to know what this type of looping is called, and what I can read with examples on how to understand approaching this challenge..
    Thank you for any help.
    -= Bruce D. Meyer

    The reason for the parsing (I thought I explained it, must have been too vague) is I have about 30 agencies in a csv file.
    Each agency can be determined by their subnet(s) and domain(s)
    I need to put all lines in the csv relating to each agency in their own separate csv file to distribute to them so I am not sharing agency 'A' info with the other 29 agencies.
    I get the regex comment. Thank you. For some reason I am rather hesitant to use PCRE under windows. I'll see how it works.
    Your comment on "Reloading a large file repeatedly takes more time", is the exact reason why I asked the question. I want to get away from that.
    I appreciate your quick reply, I think your example will work nicely. 
    -= Bruce

  • Looping through files with Regular expressions ?

    Hi,
    My Question is:
    if i have the following Regular Expression,
    String regrex = "tree\\s\\w{1,4}.+\\s=\\s(.*;)";
    The file in which i am looking for the string has multiple entries, is it
    possible to do another regular expression on the captured group (.*;)
    which is in the original Regular expression ?
    The text that is captured by the RE is of the type "(1,(2,((3,5),4)));" for
    each entry, and different entries in the file have slightly different syntax
    is it possible to loop through the file and first of all check for the presence
    of the original RE in each entry of the file
    and then secondly, check for the presence of another RE on the captured group?
    [ e.g. to check for something like, if the captured group has a 1 followed by a 3
    followed by a 5 followed by a and so on ].
    Thanks Very much for any help, i've been struggling with this for a while!!
    Much appreciated
    The code that i have so far is as follows:
    import java.util.*;
    import java.util.regex.*;
    import java.io.*;
    import java.lang.*;
    import javax.swing.*;
    public class ExpressReg {
    public String Edit;
    public ExpressReg(String editorEx){
    Edit = editorEx; // Edit = JTextArea
    String regrex = "tree\\s\\w{1,4}.+\\s=\\s(.*;)";
    //String regrex1 = "(.*;)";
    Pattern p = Pattern.compile(regrex);
    Matcher m = p.matcher(editorEx); // matcher can have more than one argument!
    boolean result = m.find();
    if(result){                           
    JOptionPane.showMessageDialog(null, "String Present in Editor");
    else if(!result){
    JOptionPane.showMessageDialog(null, "String Not Present In Editor");

    if i have the following Regular Expression,
    String regrex = "tree\\s\\w{1,4}.+\\s=\\s(.*;)";
    The file in which i am looking for the string has multiple entries, is it
    possible to do another regular expression on the captured group (.*;)
    which is in the original Regular expression ?Yes, the capturing group is $1 (the only one) referenced in source code as m.group(1).
    m.group() will return entire matching.
    simply use this way:
    String result = m.group(1);
    // your stuff: could be another validation
    The text that is captured by the RE is of the type "(1,(2,((3,5),4)));" for
    each entry, and different entries in the file have slightly different syntax
    is it possible to loop through the file and first of all check for the presence
    of the original RE in each entry of the file
    and then secondly, check for the presence of another RE on the captured group?Again "Yes", no limits!
    Don't need to create another Matcher, just use m.reset(anotherSourceString)..loop using the same pattern.
    Note: Take care with ".*" because regex nature is "greedy", be more specific, eg.: "\\d" just matches digits (0-9).
    Can you give us some sample of "slight difference" ?

  • Looping through 2 Result Sets - Not working-HELP!!

    This code loops through my first result set fine.....so I take the first part number from the result set, do a second result set to bring back all part conditions associated with that part number and compare them to see if they are all the same. When it hits the second loop with the second result set, it only loops once. I know this because of my system.out.println only print once.....can someone see where I'm going wrong....thanks in advance....
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
    DataSource ds = this.getDataSource();
    HttpSession sess = req.getSession();
    if (sess == null)
    res.sendRedirect(/error.html");
    else
    synchronized(sess)
    UtilParts part = (UtilParts)sess.getValue("UtilParts.PARTS");
    String[] partNumbers = new String[10];
    for(int index=0; index < partNumbers.length; index ++)
    partNumbers[index] = req.getParameterValues("partNumber"+index)[0];
    partNumbers[index] = partNumbers[index].trim();
    String partDesc = req.getParameterValues("partdesc")[0].toUpperCase();
    partDesc = partDesc.trim();
    int rowsCounted = 0;
    for(int index = 0 ; index < partNumbers.length; index ++)
    if(partNumbers[index].equals(""))
    rowsCounted ++;
    Connection conn = null;
    ResultSet resultSet = null;
    ResultSet resultSetMultCond = null;
    PreparedStatement getPartInfo = null;
    Statement getMultPartCond = null;
    String sqlMultCond = null;
    String sql = null;
    try
    conn = ds.getConnection(id,pass);
    conn.setReadOnly(true);
    if(partDesc.equals(""))
    sql = "SELECT #PART,#PDESC,#CONDS,COUNT(#PART) AS PCOUNT FROM MYLIB WHERE #PART LIKE '";
    boolean first = true;
    for (int i=0; i < partNumbers.length; i++)
    if (!partNumbers.equals(""))
    if (!first)
    sql += "%' OR #PART LIKE '";
    sql += partNumbers;
    first = false;
    sql += "%' AND #RECDT BETWEEN 20010816 AND 20020816 GROUP BY #PART,#PDESC,#CONDS ORDER BY #PART";
    getPartInfo=conn.prepareStatement(sql);
    resultSet = getPartInfo.executeQuery();
    if(!partDesc.equals(""))
    String sqlDesc = "SELECT #PART,#PDESC,#CONDS,COUNT(#PART) AS PCOUNT FROM MYLIB WHERE #PDESC LIKE ? AND #RECDT BETWEEN 20010816 AND 20020816 GROUP BY #PART,#PDESC ORDER BY #PART";
    getPartInfo = conn.prepareStatement(sqlDesc);
    getPartInfo.setString(1,partDesc + "%");
    resultSet = getPartInfo.executeQuery();
    Vector enum = new Vector();
    int rowsadded = 0;
    while (resultSet.next())
    rowsadded += 1;
    UtilParts utilityPart = new UtilParts();
    String s = (String)resultSet.getString("#PART");
    s = s.trim();
    utilityPart.setPartNumber(s);
    String t = (String)resultSet.getString("#PDESC");
    t = t.trim();
    utilityPart.setPartDesc(t);
    int resultCount = 0;
    int sameCond = 0;
    String storeName = null;
    String holdName = "No";
    int i = resultSet.getInt("PCOUNT");
    String cond;
    if(i == 1)
    String c = (String)resultSet.getString("#CONDS");
    c = c.trim();
    if(c.equals(""))
    cond = "N/A";
    else
    cond = c;
    utilityPart.setPartCondition(cond);
    utilityPart.setPartCount(i);
    else
    sqlMultCond = "SELECT #PART,#CONDS,COUNT(*) AS MCOUNT FROM MYLIB WHERE #PART = '" + s + "' AND #RECDT BETWEEN 20010816 AND 20020816 GROUP BY #PART,#CONDS ORDER BY #PART";
    getMultPartCond = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_SENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
    resultSetMultCond = getMultPartCond.executeQuery(sqlMultCond);
    int row =0;
    while(resultSetMultCond.next())
    row += 1;
    System.out.println("Row: " + row);
    resultCount = resultSetMultCond.getInt("MCOUNT");
    System.out.println("MCount: " + resultCount);
    if(holdName.equals("No"))
    System.out.println("You are in the no loop");
    storeName = (String)resultSetMultCond.getString("#CONDS");
    holdName = storeName;
    sameCond += 1;
    System.out.println("Same condition: " + sameCond);
    System.out.println("StoreName: " + storeName);
    System.out.println("HoldName: " + holdName);
    else
    storeName = (String)resultSetMultCond.getString("#CONDS");
    if(holdName.equals(storeName))
    sameCond += 1;
    System.out.println("Same condition: " + sameCond);
    System.out.println("StoreName: " + storeName);
    System.out.println("HoldName: " + holdName);
    resultSetMultCond.close();
    getMultPartCond.close();
    if(resultCount == sameCond)
    System.out.println("resultcount equals samecount");
    utilityPart.setPartCount(1);
    utilityPart.setPartCondition("same conditions everywhree");
    else
    System.out.println("resultcount not equal samecount");
    utilityPart.setPartCount(i);
    utilityPart.setPartCondition("");
    enum.addElement(utilityPart);
    }//end of first while
    if (rowsadded == 0 )
    res.sendRedirect("/PartNotFound.html");
    sess.putValue("PARTS",enum);
    resultSet.close();
    conn.close();
    getServletConfig().getServletContext().getRequestDispatcher("/NextQuery.jsp").forward(req,res);
    return;
    catch (SQLException e1)
    System.out.println(e1.getMessage());
    e1.printStackTrace();
    res.sendRedirect("/FindPartSQLError.htm");
    }//end of synchronized session
    }//end of else
    }//end of method

    Got the answer...changed my select statement in my second loop, did a group by CONDS which of course if they are all the same....the result set would only have one value therefore the loop will only execute once...took out the group by CONDS and ran fine....

  • Loop through all layers and sublayers

    is there a way that I can loop through all layers and sublayers looking for a name of a layer? I have one that loops through only top level layers. I am thinking I have to somehow incorperate all pathItems, groupItems and the like to incorperate all types of "layers" there might be, since a group is technically not a layer but a groupItem.
    this is what I am doing so far:
    for (var i = 0; i < numberOfLayers; i++) {
        var customName = "div structure";
        var myLayer = app.activeDocument.layers[i];
        var myLayer = myLayer.name;
        alert(myLayer);
        //alert (myLayer);
        if (customName == myLayer) {
            alert("layer matches");
        else { break; }
    any ideas?

    Sorry I don't understand what it is you are trying to achieve… Most collections offer a getByName() method if you know what you are looking for eg…
    doc.layers.getByName( 'fluff' );
    This should return you the first found or error so you need to try & catch when using this…

  • Loop through values in rows to find faulty data

    Hi all,
    We have a column which is supposed to have values in increasing order.(If it doesn't comply with this rule, we want to discard the row). How do I loop through rows for a particular column, in SQL or PL.SQL?
    Thanks.

    user12295995 wrote:
    If it doesn't comply with this rule, we want to discard the rowNot sure what you mean. It looks like you want to get rid of duplicates. If so, use:
    DELETE tbl WHERE ROWID NOT IN (SELECTMIN(ROWID) FROM tbl GROUP BY col)
    /If you want to identify gaps, use:
    with t as (
               select 1 id from dual union all
               select 2 id from dual union all
               select 3 id from dual union all
               select 4 id from dual union all
               select 5 id from dual union all
               select 11 id from dual union all
               select 12 id from dual union all
               select 13 id from dual union all
               select 21 id from dual union all
               select 22 id from dual union all
               select 23 id from dual
    select  '[' || (prev_id + 1) || ' - ' || (id - 1) || ']' gap
      from  (
             select  id,
                     lag(id) over(order by id) prev_id
               from  t
      where id > prev_id + 1
      order by id
    GAP
    [6 - 10]
    [14 - 20]
    SQL> SY.

  • Loop through CSV to create XML

    Hello all, first and foremost I want to apologize if this has been answered somewhere, but I am looking to do the following:
    I have 500 records I need put in XML format. The records are currently in CSV format. I can use curl to upload a record in XML format using our applications API. I was under the impression that I could generate 1 large XML file and upload the entire group.
    I have a script that will read in data from a CSV and output it to a file in XML format. I got the script the way I thought I needed it working, which was to create a new xml file, append a line to it, then loop through the csv and echo my string repeatedly inputing the variables from the CSV file. I could then upload the XML file where I needed it.
    As it turns out, it seems the API will only allow me to upload 1 record at a time. (ALMOST pointless IMO.) So what I am looking to do is change the way the script loops through the CSV file, and instead of creating 1 large file, I would like the script to loop through the CSV one line at a time, create the XML file of only 1 record, upload it using curl, delete itself (or its contents) and repeat that process throughout the entire CSV file.
    I am just getting familiar with loops, so Im not sure how I would even start this process, or even word what I want properly to search google. (Which I have been for the last two days, thats how I frankenstiened what I have below. Any help would be greatly appreciated.
    The script is as follows:
    #!/bin/bash
    echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' >> xmldata.xml
    #:Read variables from XMLInput.csv:#
    while read inputline;do
    line0="$(echo $inputline | cut -d, -f1)"
    line1="$(echo $inputline | cut -d, -f2)"
    #:Set auto increment ID:#
    idAdd0=$((idAdd0 +1))
    #:removes trailing alpha characters leaving only the IP address:#
    cutLine0=${line0//[^0-9.]/}
    #:Strips trailing octet and appends .1:#
    startIP=`echo $cutLine0 | sed 's/.[0-9]*$/.1/'`
    #:Strips trailing octet and appens 254:#
    endIP=`echo $cutLine0 | sed 's/.[0-9]*$/.254/'`
    #:echos line to txt file as XML:#
    echo "<network_segment><id>"$idAdd0"</id><name>$line0</name><starting_address>$startIP</starting_address><ending_address>$endIP</ending_address><distribution_point/><url/><netboot_server/><swu_server/><building>$line1</building><department/><override_buildings>false</override_buildings><override_departments>false</override_departments></network_segment>" >> xmldata.xml
    done < XMLInput.csv
    exit 0

    What I ended up doing was having the script create 500 separate XML files in a folder by adding my auto increment variable to the XML file name,
    then curling each file as a separate entry. A litte dirtier than I wanted, but in the end, I didn't have to manually enter 500 subnets
    and define there locations in a website. Job Done.
    Script if interested:
    #!/bin/bash
    #:Read variables from XMLInput.csv:#
    while read inputline;do
    line0="$(echo $inputline | cut -d, -f1)"
    line1="$(echo $inputline | cut -d, -f2)"
    echo
    #:Set auto increment ID:#
    idAdd0=$((idAdd0 +1))
    #:removes trailing alpha characters leaving only the IP address:#
    cutLine0=${line0//[^0-9.]/}
    #:Strips trailing octet and appends .1:#
    startIP=`echo $cutLine0 | sed 's/.[0-9]*$/.1/'`
    #:Strips trailing octet and appens 254:#
    endIP=`echo $cutLine0 | sed 's/.[0-9]*$/.254/'`
    #:echos line to txt file as XML:#
    echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'"<network_segment><id>"$idAdd0"</id><name>$line0</name><starting_address>
    $startIP</starting_address><ending_address>$endIP</ending_address><distribution_point/><url/><netboot_server/><swu_server/><building>$line1</building>
    <department/><override_buildings>false</override_buildings><override_departments>false</override_departments></network_segment>" >> xmldata$idAdd0.xml
    #:upload XML file to JSS:#
    `curl -k -v -u account:Password https://server address/JSSResource/networksegments/name/SegmentName -T "xmldata$idAdd0.xml" -X POST`
    done < XMLInput.csv
    exit 0

  • Looping through xml in cfscript

    Ok, I can loop through xml to get the value of any tag and
    output it to a variable. But the problem for me is getting the
    child tags of a specific tag to loop out grouped together. For
    instance, below I would want to group the xml like this.
    Year: 90
    Employer: Bank
    Wages: 2000.00
    Year: 90
    Employer: Gas Station
    Wages: 1000.00
    Ok, I can loop through xml to get the value of any tag and
    output it to a variable. But the problem for me is getting the
    child tags of a specific tag to loop out grouped together. For
    instance, below I would want to group the xml like this.
    Year: 91
    Employer: Bank
    Wages: 2500.00
    Year: 91
    Employer: Gas Station
    Wages: 1500.00
    <year value="90">
    <employer name="bank">
    <wages>2000.00</wages>
    </employer>
    <employer name="gas station">
    <wages>1000.00</wages>
    </employer>
    </year>
    <year value="91">
    <employer name="bank">
    <wages>2500.00</wages>
    </employer>
    <employer name="gas station">
    <wages>1500.00</wages>
    </employer>
    </year>
    Thanks in advanced,
    Anthony

    It will always be sorted by year and by employer. I was just
    trying to get the basic concept of the looping and would figure the
    rest out myself. But I would want it to look like this.
    Employer: Bank
    Year: 90 Wages: 2000.00
    Year: 91 Wages: 2500.00
    Employer: Gas Station
    Year: Wages: 1000.00
    Year: Wages: 1500.00
    Thanks in advance.

  • Nested Loops...looping through one month of data at a time year by year

    Hi all,
    I'm trying to create an insert statement that loops through a table that has 10 years of data (2001 to 2010) month by month to minimize impact on server and commits more frequently to avoid filling up the redo logs and rollback tablespaces. The table is large, has about 40 millions records per year. Lets say the structure of the table is the following:
    Customer_ID number(9),
    Order_Item_1 number(6),
    Order_Item_2 number(6),
    Order_Item_3 number(6),
    Order_date date
    The table is in flat format but I want to normalize it so that it looks like the following:
    Customer_ID Order_Seq Order_Item Order_date
    999999999 1 555555 01-jan-2001
    999999999 2 666666 01-jan-2001
    999999999 3 444444 01-jan-2001
    888888888 1 555555 03-jan-2001
    888888888 2 666666 03-jan-2001
    But because I want to loop through month by month....I need to set it up so that it loops through month by month, year by year (Using the Order Date Field) and Order_item by Order_item. Something like:
    so my insert statements would be something like if I hardcoded instead of put the insert statement into a loop:
    insert into orders_normalized
    (Customer_id,Order_seq,Order_item,Order_date) select customer_id,1,Order_item,Order_date where Order_item_1 is not null and to_char(order_date,'yyyy') = '2001' and to_char(order_date,'mm')='01';
    insert into orders_normalized
    (Customer_id,Order_seq,Order_item,Order_date) select customer_id,2,Order_item,Order_date where Order_item_2 is not null and to_char(order_date,'yyyy') = '2001' and to_char(order_date,'mm')='01';
    insert into orders_normalized
    (Customer_id,Order_seq,Order_item,Order_date) select customer_id,3,Order_item,Order_date where Order_item_3 is not null and to_char(order_date,'yyyy') = '2001' and to_char(order_date,'mm')='01';
    insert into orders_normalized
    (Customer_id,Order_seq,Order_item,Order_date) select customer_id,1,Order_item,Order_date where Order_item_1 is not null and to_char(order_date,'yyyy') = '2001' and to_char(order_date,'mm')='02';
    insert into orders_normalized
    (Customer_id,Order_seq,Order_item,Order_date) select customer_id,2,Order_item,Order_date where Order_item_2 is not null and to_char(order_date,'yyyy') = '2001' and to_char(order_date,'mm')='02';
    insert into orders_normalized
    (Customer_id,Order_seq,Order_item,Order_date) select customer_id,3,Order_item,Order_date where Order_item_3 is not null and to_char(order_date,'yyyy') = '2001' and to_char(order_date,'mm')='03';
    Hope this makes sense.
    Thanks

    Does the sequence of items in an order really matter? In other words, do we really need to preserve that an item was in position 2 versus position 1? I bet that the sequence or position of each item in an order is not meaningful. They were probably numbered 1, 2, and 3 just to make them uniquely named columns so there would be three slots to hold up to 3 items in the denormalized table.
    You only have about 400 million rows to insert, so it could feasibly be done in a single transaction (depending on your database environment).
    You can always do a create table as select (CTAS) to help with undo / redo issues and get better performance. You could run it in parallel, and spit it out to a new table partitioned by month. Single DDL statement running in parallel making your new table--sounds good to me.
    How about something like this:
    CREATE TABLE ORDERS_NORMALIZED
    (CUSTOMER_ID, ORDER_ITEM, ORDER_DATE)
    PARTITION BY RANGE(ORDER_DATE)
    PARTITION p200901 VALUES LESS THAN (TO_DATE('200902','YYYYMM')),
    PARTITION p200902 VALUES LESS THAN (TO_DATE('200903','YYYYMM')),
    PARTITION p201012 VALUES LESS THAN (TO_DATE('201101','YYYYMM'))
    as SELECT CUSTOMER_ID, ORDER_ITEM_1, ORDER_DATE
       FROM OTHER_TABLE
       WHERE ORDER_ITEM_1 IS NOT NULL
       UNION ALL
       SELECT CUSTOMER_ID, ORDER_ITEM_2, ORDER_DATE
       FROM OTHER_TABLE
       WHERE ORDER_ITEM_2 IS NOT NULL
       UNION ALL
       SELECT CUSTOMER_ID, ORDER_ITEM_3, ORDER_DATE
       FROM OTHER_TABLE
       WHERE ORDER_ITEM_3 IS NOT NULL.....................
    Out of curiosity, why not normalize it further? You could have used two tables instead of one.
    One (ORDER) with:
    ORDER_ID
    CUSTOMER_ID
    DATE
    Order_id would be a new surrogate key / primary key.
    Another table (ORDER_ITEM) with:
    ORDER_ID
    ORDER_ITEM
    It would be a table that links ORDERS to ITEMS. You get the idea.

  • Text is not being displayed in sync on a label when looping through a list -- how to fix?

    I have a list of states (50 states).  I loop through this list (in a winform app -- VS2012) and want to display the current state ID that is being processed in the loop in the text property of a label.  I precede the label.Text = StateID line with
    Application.DoEvents() but I am also (in Debug mode) writing the same text to the console.  The console displays correctly, but there appears to be a lag in the label.Text property
    List<string> StateList = new List<string> { "al", "ak", "az","ar","ca","co","ct","de","fl","ga",...};
    foreach (string stateID in StateList)
        Application.DoEvents();
        lblStateID.Text = "State is " + stateID;  //--there is a lag here
    I vaguely recollect something about a NotifyPropertyChanged event.  I know this is common in WPF, but is there something similar in winform?  Or is there a way to make the desired text to be displayed in the label.Text property in synchronization
    with the loop?
    Rich P

    Thank you.  This is way simpler than implementing the INotifyPropertyChanged Interface.  Although, here is an article on the INotifyPropertyChanged Interface and event
    http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx
    Rich P

  • Automator - Loop through a text file and process data through a 3rd party software

    Just stumbled on Automator the other day (I am a mac n00b) and would like to automate the processing of a text file, line-by-line, using a third party tool.  I would like Automator to loop through the text file one line at a time, copy the string and keep as a variable.  Next, place the variable data (copied string) into the text field of the 3rd party software for processing.  Once the processing is complete, I would like Automator to fetch the next line/string for processing.  I see items like "copy from clipboard" and  "variables" within the menu but I am not finding much documentation on how to utilizle this tool.  Just hear how potentially powerful it is. 
    The 3rd party software is not a brand name, just something made for me to process text.  I may have to use mouse clicks or tabs + [return] to navigate with Automator.  A term I heard on Bn Walldie's itunes video series was "scriptable software" for which I don't think this 3rd party app would be. 
    Kind regards,
    jw

    Good news and bad news...
    The good news is that it should be entirely possible to automate your workflow.
    The bad news is that it will be a nightmare to implement via Automator, if it's even possible.
    Automator is, essentially a pretty interface on top of AppleScript/Apple Events, and with the pretty interface comes a certain stranglehold on features. Knowing how to boil rice might make you a cook, but understanding flavor profiles and ingredient combinations can make you a chef, and it's the same with AppleScript and Automator. Automator's good at getting you from points A to B but if there are any bumps in the road (e.g. the application you're using isn't scriptable) then it falls apart.
    What I'm getting at is that your requirements are pretty simple to implement in AppleScript because you can get 'under the hood' and do exactly what you want, as opposed to Automator's restricted interface.
    The tricky part is that if no one else can see this app it's going to be hard to tell you what to do.
    I can give you the basics on reading a file and iterating through the lines of text in it, and I can show you how to 'type' text in any given application, but it may be up to you to put the pieces together.
    Here's one way of reading a file and working through each line of text:
    -- ask the user for a file:
    set theFile to (choose file)
    -- read the file contents:
    set theFileContents to (read file theFile)
    -- break out the lines/paragraphs of text:
    set theLines to paragraphs of theFileContents
    -- now iterate through those lines, one by one:
    repeat with eachLine in theLines
      -- code to perform for eachLine goes here
    end repeat
    Once you have a line of text (eachLine in the above example) you can 'type' that into another application via something like:
    tell application "AppName" to activate
    tell application "System Events"
              tell process "AppName"
      keystroke eachLine
              end tell
    end tell
    Here the AppleScript is activating the application and using System Events to emulate typing the contents of the eachLine variable into the process. Put this inside your repeat loop and you're almost there.

Maybe you are looking for

  • Probar sap business one 8.8

    Estimados Foristas, alguien sabe donde puedo obtener sap business one 8,8 para probarlo, lo solicite al partner de mi empresa, me dijo que con mi s-number podia bajarlo, lo intente y nada, luego de esto me dijo que no podia hacer nada. necesito bajar

  • How to enter values in JList box and JTable ???

    Hi friends... i am new to Swing SInce i am using Netbeans IDE 5.5 and there is easy to do swing programming using this IDE now i am confused using JTable and JList box since i used method Insert in AWT but how to add values in LIST BOX ( JList ) ex.

  • Scheduling Discoverer Reports in Bulk (without GUI) - is there a way?

    Hi all, I'm looking for a way to schedule a bunch of reports without using the GUI (there's zillions of reports that run well most of the time but sometimes some of them don't work, so instead of having people going mad clicking through all of them i

  • Can only start up in "safe boot"

    Yesterday my iMacG5 (Mac OS X Leopard) started making a loud noise (fan) and would not respond to mouse/keyboard, so we shut it off manually. Since then the only way I can start it is in "safe boot" mode by holding down the shift key during start up.

  • I had new roller kit installed on my laser 3500N. Now it prints about 1/4" to high on paper

    How can I fix printing 1/4" high on paper since I had new roller kit installed.  Tech can't solve problem.  Is there adjustment in printer paper path?