CFParam link to a table with no record

Guys, I'm a newb feeling my way a long with CF, and have made
some good headway. Here's my challenge de jour:
I have a main table, `customers`. I have two other tables,
`products` and `customers_products`. The latter has four fields:
its own primary key, a customer_id, a product_id, and the
product_name.
For the sake of my question, I've loaded `customers_products`
with dummy data that relates perfectly with some `customer`s and
their `products`, using their respective keys. I can easily insert
new records to this table, `customer_products`, for any customer by
using an INSERT form, as long as there is already at least one
customer record in the `customer_product` table. But, if I attempt
to go to
add_product.cfm?customer_id= from that customer form for a
customer who has yet to have any products entered in
`customer_products`, I get the error, "Invalid data '' for
CFSQLTYPE CF_SQL_NUMERIC". This, I presume, due to the null value,
as the CRParam URL is the customer_id - and there is no customer_id
in that table, yet.
I want to be able to go from the customer record form to the
add_products.cfm form, specifically for that customer, even though
there are no current records for that customer in the
`customer_products` table.
I'd add code, but I have a feeling that this is not so much a
problem with code, but lack of knowledge of how to do a common
practice: add a new record to a table and applying the correct
customer key to the customer_id field.
If you know of a site or tutorial that I can use, that would
be great.
Thank you!

If your SQL query is looking at the URL for an ID in order to
query the table and it doesn't exist you'll get a query.recordcount
of 0. You can then use this to direct the user to another
page...like an add page or something. At the same time you could
also check the ID is right before querying the database (my syntax
may be a little incorrect as I am doing this from memory at 8am!)
e.g.
<cfif isDefined("url.customer_id") and
len(url.customer_id)>
<!---Do your query here.--->
<cfif my_query.recordcount eq 0>
<!--- the URL existed but the query returned 0 so let's
redirect them to the add page or something --->
<cflocation url="my_add_page.cfm" addtoken="no" />
<cfabort />
</cfif>
<cfelse>
<!---URL looks bad.--->
<p>Nothing was found because the URL looks
wrong.</p>
</cfif>

Similar Messages

  • I HAVE A SOURCE TABLE WITH 10 RECORDS AND TARGET TABLE 15 RECORDS. MY WUESTION IS USING WITH THE TABLE COMPARISON TRANSFORM I WANT TO DELETE UNMATCHED RECORDS FROM THE TARGET TABLE ??

    I HAVE A SOURCE TABLE WITH 10 RECORDS AND TARGET TABLE 15 RECORDS. MY QUESTION IS USING WITH THE TABLE COMPARISON TRANSFORM .I WANT TO DELETE UNMATCHED RECORDS FROM THE TARGET TABLE ?? HOW IT IS ??

    Hi Kishore,
    First identify deleted records by selecting "Detect deleted rows from comparison table" feature in Table Comparison
    Then Use Map Operation with Input row type as "delete" and output row type as "delete" to delete records from target table.

  • Select max date from a table with multiple records

    I need help writing an SQL to select max date from a table with multiple records.
    Here's the scenario. There are multiple SA_IDs repeated with various EFFDT (dates). I want to retrieve the most recent effective date so that the SA_ID is unique. Looks simple, but I can't figure this out. Please help.
    SA_ID CHAR_TYPE_CD EFFDT CHAR_VAL
    0000651005 BASE 15-AUG-07 YES
    0000651005 BASE 13-NOV-09 NO
    0010973671 BASE 20-MAR-08 YES
    0010973671 BASE 18-JUN-10 NO

    Hi,
    Welcome to the forum!
    Whenever you have a question, post a little sample data in a form that people can use to re-create the problem and test their ideas.
    For example:
    CREATE TABLE     table_x
    (     sa_id          NUMBER (10)
    ,     char_type     VARCHAR2 (10)
    ,     effdt          DATE
    ,     char_val     VARCHAR2 (10)
    INSERT INTO table_x (sa_id,  char_type, effdt,                          char_val)
         VALUES     (0000651005, 'BASE',    TO_DATE ('15-AUG-2007', 'DD-MON-YYYY'), 'YES');
    INSERT INTO table_x (sa_id,  char_type, effdt,                          char_val)
         VALUES     (0000651005, 'BASE',    TO_DATE ('13-NOV-2009', 'DD-MON-YYYY'), 'NO');
    INSERT INTO table_x (sa_id,  char_type, effdt,                          char_val)
         VALUES     (0010973671, 'BASE',    TO_DATE ('20-MAR-2008', 'DD-MON-YYYY'), 'YES');
    INSERT INTO table_x (sa_id,  char_type, effdt,                          char_val)
         VALUES     (0010973671, 'BASE',    TO_DATE ('18-JUN-2010', 'DD-MON-YYYY'), 'NO');
    COMMIT;Also, post the results that you want from that data. I'm not certain, but I think you want these results:
    `    SA_ID LAST_EFFD
        651005 13-NOV-09
      10973671 18-JUN-10That is, the latest effdt for each distinct sa_id.
    Here's how to get those results:
    SELECT    sa_id
    ,         MAX (effdt)    AS last_effdt
    FROM      table_x
    GROUP BY  sa_id
    ;

  • How to spool in excel sheet of table with 1561828 records

    how to spool in excel sheet of table with 1561828 records
    i think excel got only 65l limit?
    COUNT(*)
    1561828
    i am using windows box...any suggestions?

    Raman wrote:
    means excel 2007 can hold 15,61,828 records ? can i give like spool filename.xls?You can name the spool file anything you want, but surely you realize that naming it 'filename.xls' doesn't make it an xls file. A name is just a name. There are industry standards on certain names indicating certain file formats, but the name doesn't make it that format.

  • Crystal Report linked to a table with filter attached

    I have a Crystal Report based on 2 tables and I want it to display every incident in the incident table and to pull the truckID of the
    first truck on the scene from the truck table . So the finished product should look like this…
    IncidentID           IncidentNum     ResponseTime                  First Arriving Truck           Disctict
      1x44452                1258ab55             5:32                                        B8                              2
    *The first arriving truck is the truck in the Truck Table with the same IncidentID and  the earliest ArrivalTime.  There will be multiple trucks for each incident but I want it to only show the one that arrived first (ArrivalTime).  So one line per incidentID.
    Incident Table
    IncidentID
    IncidentNum
    ResponseTime
    District
    Truck Table (Will contain many trucks for one incident with the following info
    Truckkey
    IncidentID (Link to Incident Table)
    ArrivalTime
    TruckID
    I figure I probably need to build a formula with the min function or perhaps an OnCommand – I’m just not sure.
    The biggest issue is the overall report has 4 filter settings.  They can select a date range, a location, an incident type and a range for the response time. So I do this with the Select Expert
    I can get all of that to work except I cannot figure out how to get it to pull the First Arriving Truck without duplicating the incident
    line.  Also, if there is a Truck with an ArrivalTime of Null I want it to ignore that Truck Table record.
    Can anyone help???

    Hi Debbie,,
    You may try this:
    1) Go to the Group Expert > Create a Group on the 'Incident ID' field from the Incident Table
    2) Insert a summary on the 'Arrival Time' field and place the field on the Group Footer
    3) Move all the fields from the Details section to the Group Footer
    4) Go to the Group Selection Formula (Report > Selection Formulas > Group) and use this code:
    {Truck.ArrivalTime} = Minimum({Truck.ArrivalTime}, {Incident ID})
    5) Suppress the Details Section
    -Abhilash

  • Database Adapter: cannot access table with complex record type as columns

    Hi all,
    I cannot perform any operations on a table that has columns with complex record type.
    I have created a table to store purchase order details.
    Sample script:
    CREATE type XX_CUST_INFO_TYP as object
    ssn VARCHAR2(20),
    rating NUMBER(15)
    CREATE type XX_ITEM_TYP as object
    item_name VARCHAR2(20),
    unit_price NUMBER(15),
    quantity NUMBER(15)
    CREATE table XX_PORDER (cust XX_CUST_INFO_TYP, porder XX_ITEM_TYP);
    When i try to access the table X_PORDER in jdev through a database Adapter, i receive the error as
    "some tables contains columns that are not recognized by the database adpter"
    1.) so in this case, how to include such tables that have complex types?
    Also, check out this scenario also..
    1. add a table through a database adapter
    2. drop the table in backend
    3. i can still see the table and its structure in the database adapter wizard even after restarting Jdeveloper.. How is it possible?
    These are some really interesting scenarios to experiment. Please suggest your ideas on this..
    Thanks All!

    Hi Hem,
    for a select you could select against a view. And for inserts you could create a stored procedure. They support complex types since 10.1.2. Complex types support in tables/views was added for 11 (next major release).
    You might be able to use PureSQL as a workaround too, i.e.
    insert into XX_PORDER values (XX_CUST_INFO_TYP(?,?), XX_ITEM_TYP(?, ?, ?))
    As for your other problem, in 10.1.2/10.1.3 the DBAdapter wizard sits on top of the Jdev Offline Tables and TopLink Mapping Workbench components. When you remove a table in the wizard it won't delete the Offline DB component. It was added by the wizard, but afterwards it is public to the entire Jdev project. You must remove it from Jdev yourself. This has been improved for the next major release too, no artifacts from underlying components are created.
    To remove it select:
    Offline DB Objects -> <schema> -> <table> and try File.. Erase From Disk.
    Thanks
    Steve

  • Dynamic Table with Random Records

    What I am trying to do is select random records from a table
    and display them in a dynamic table with max columns set to 3 and
    the 4th record to be on a new row. Below is what I have right now
    and it works to randomly pick records but has no function to set
    columns in a table. If there is an easier way feel free to let me
    know. I have tried various ways to do this but none seem to work.
    <CFQUERY NAME="getItems" DATASOURCE="absi">
    SELECT catfit.*, modcats.*, prodmat.*, prod.* FROM catfit,
    modcats,
    prodmat, prod WHERE prodmat.prodid=catfit.prodid And
    catfit.catid=modcats.catid
    ORDER BY modl ASC </cfquery>
    <cfif getItems.recordCount>
    <cfset showNum = 3>
    <cfif showNum gt getItems.recordCount>
    <cfset showNum = getItems.recordCount>
    </cfif>
    <cfset itemList = "">
    <cfloop from="1" to="#getItems.recordCount#"
    index="i">
    <cfset itemList = ListAppend(itemList, i)>
    </cfloop>
    <cfset randomItems = "">
    <cfset itemCount = ListLen(itemList)>
    <cfloop from="1" to="#itemCount#" index="i">
    <cfset random = ListGetAt(itemList, RandRange(1,
    itemCount))>
    <cfset randomItems = ListAppend(randomItems, random)>
    <cfset itemList = ListDeleteAt(itemList,
    ListFind(itemList, random))>
    <cfset itemCount = ListLen(itemList)>
    </cfloop>
    <cfloop from="1" to="#showNum#" index="i">
    <cfoutput>
    <table width="205" border="0" align="left"
    cellpadding="0" cellspacing="0">
    <tr>
    <td width="235" height="116"> <div
    align="center"><img
    src="../Products/ProductPictures/#getitems.pic[ListGetAt(randomItems,
    i)]#" width="100"></div></td>
    </tr>
    <tr>
    <td
    class="ProdTitle">#getitems.brand[ListGetAt(randomItems,
    i)]# #getitems.modl[ListGetAt(randomItems, i)]#</td>
    </tr>
    <tr>
    <td
    class="paragraph">$#getitems.prc[ListGetAt(randomItems,
    i)]#</td>
    </tr>
    <tr>
    <td><A
    href="../Products/details.cfm?prodid=#getItems.prodid[ListGetAt(randomItems,
    i)]#" class="linkcontact">more
    info</a></td>
    </tr>
    <tr>
    <td> </td>
    </tr>
    </table>
    </cfoutput>
    </cfloop>
    </cfif>

    To start a new row after 3 records, do something like this.
    <table>
    <tr>
    <cfoutput query="something">
    <td>#data#<td>
    <cfif currentrow mod 3 is 0>
    </tr><tr>
    </cfoutput>
    </tr>
    </table>
    You should also know that your approach is very inefficient
    in that you are bringing in to cold fusion more data than you need.
    First of all you are selecting every field from 3 tables when you
    don't appear to be using all of them. Second, you are selecting
    every record and you only want to use 3. There are better ways out
    there, but they are db specific and you did not say what you are
    using.

  • Comparing Two tables with 300k records and update one table

    Could you let me know how to compare two tables having 300k records and update one table.below is the scenario.
    Table Tabl_1 has columns A,B and Tabl_2 has columns B,new_column.
    Column B has same data in both the tables.
    I need to update Tabl_2 in new_column with Tabl_1 A column data by comparing B column in both tables.
    I m trying to do using PLSQL Tables.
    Any suggestion?
    Thanks.

    Hi,
    Whenever you have a problem, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) from all tables involved, so that the people who want to help you can re-create the problem and test their ideas.
    Also post the results you want from that data, and an explanation of how you get those results from that data, with specific examples.
    If you're asking about a DML statement, such as UPDATE, the CREATE TABLE and INSERT statements should re-create the tables as they are before the DML, and the results  will be the contents of the changed table(s) when everything is finished.
    Always say which version of Oracle you're using (for example, 11.2.0.2.0).
    See the forum FAQ: https://forums.oracle.com/message/9362002
    ef2019c7-080c-4475-9cf4-2cf1b1057a41 wrote:
    Could you let me know how to compare two tables having 300k records and update one table.below is the scenario.
    Table Tabl_1 has columns A,B and Tabl_2 has columns B,new_column.
    Column B has same data in both the tables.
    I need to update Tabl_2 in new_column with Tabl_1 A column data by comparing B column in both tables.
    I m trying to do using PLSQL Tables.
    Any suggestion?
    Thanks.
    Why are you trying to use PL/SQL tables?  If tabl_1 and tabl_2 are regular database tables, it will be much simpler and faster just to use them.
    Depending on your requirements, you can do an UPDATE or MERGE, either in SQL or in PL/SQL.

  • Program times out while looping at internal table with huge records - Needs fine tuning suggestions

    Hi,
    I am trying to execute a report. It times out while looping at vbap internal table. This internal table has 140000  records and does the validation within this loop and geenrates data for the output. Due to this huge volume, the program times out when executed foreground.
    There are no nested loops, so I cannot apply 'Parallel Cursor' here.
    Is there any way I can fine tune the program so that it doesn't timeout? Is it possible to apply 'Parallel Processing' . If yes, how?
    Thanks,
    Pavan

    Hi Pavan ,
                  ->sort your internal table by all primary key for vbap.
                  ->Read a Record from the table (use your condition here)
                  ->if record satisfys your where condition ,get that record index .
                  ->loop the table from the index (without condition) .
                  its like parallel cursor only but for single loop .;-)
                  ->use field symbols ,wherever possible .
               if still dump is coming ,contact your basis team .
    regards,
    Krishna.

  • Reg - Reading internal table with multiple record in a single field

    Dear Guru's,
                        i want to read a internal table with field having mutilple entries like
    read table READ TABLE LT_T2 INTO LT_T2_WA WITH KEY HKONT IN ( '0001152430', '0001152930', '0001152410' ).
    But it says comma without preceding colon (after READ?).
    please guide me.....
    thanks & Regards,
    Balaji.S

    ya this is inside the loop.
    plz check....
    loop at lt_t2 into lt_t2_wa.
    READ TABLE LT_T2 INTO LT_T2_WA WITH KEY HKONT IN ( '0001152430', '0001152930', '0001152410' ).
    endloop.
    thanks & Regards,
    Balaji.S

  • Populating a temp table with multiple records.

    I want to populate a temp table with a a set of recs. This table will be used for
    crossing/joining with my other tables to pull out data.
    ie:
    Main table (loc)contains these fields -> county,permit,utme,utmn
    Temp table ( tmpid) contains these fields -> countytemp, permittemp
    So I will be doing a statement like this once my temp table is populated.
    Select l.county,l.permit,l.utme,l.utmn from loc l,tmpid t where l.county=t.countytemp and l.permit=t.permittemp;
    So this temp table will basically be a list of ids that can range from a few recs to several hundred.
    I want to know is there is way I can poplulate/repopulate it easily using sqlPlus/other by reading in a Ascii file
    from client PCs. (besides SQL loader).

    HI
    let me explain my requirement first,
    i need to populate my block with the results from the following sql
    SELECT * from contactdet where
    (Month=12 and TrType='MTM' and FinYr='04-05' and Userid='SA009' and Clcode='SB001')
    UNION
    SELECT * from contactdetSUM where (Clcode='SB001' AND CSCODE='AB001')
    Pease note. the where clauses i have put are different in each table and my requirement is
    the constants values i have put in where clause should be variable (ie. i should be able to put variables like :clcode or so)
    I tried us using Query data source type as 'FROM clause query' but it does not allow me to put variables in where clause.
    Is there any way out i can do this ? Please help me
    Regards
    Uday

  • Read from file to Internal Table With Extra Record

    Hi,
    I'm trying to read file from application server into internal table. Then loop thru the internal table and display.
    My text file only have 2 rows of records. However, when display the internal table, it show the 2 records plus an extra line with 0. May I know where did I do wrong?
    PARAMETERS: p_infile  LIKE rlgrap-filename OBLIGATORY DEFAULT  '/usr/sap/'..
    DATA: ld_file LIKE rlgrap-filename.
    *Internal tabe to store upload data
    TYPES: BEGIN OF t_record,
        name1 like pa0002-VORNA,
        name2 like pa0002-name2,
        age   type i,
        END OF t_record.
    DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0,
          wa_record TYPE t_record.
    *Text version of data table
    TYPES: begin of t_uploadtxt,
      name1(10) type c,
      name2(15) type c,
      age(5)  type c,
    end of t_uploadtxt.
    DATA: wa_uploadtxt TYPE t_uploadtxt,
          wa_upload TYPE t_uploadtxt.
    *String value to data in initially.
    DATA: wa_string(255) type c.
    START-OF-SELECTION.
    ld_file = p_infile.
    OPEN DATASET ld_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    IF sy-subrc NE 0.
    ELSE.
      DO.
        CLEAR: wa_string, wa_uploadtxt.
        READ DATASET ld_file INTO wa_string.
        IF sy-subrc NE 0.
          EXIT.
        ELSE.
          SPLIT wa_string AT SPACE INTO wa_uploadtxt-name1 wa_uploadtxt-name2 wa_uploadtxt-age.
          MOVE-CORRESPONDING wa_uploadtxt TO wa_upload.
          APPEND wa_upload to it_record.
        ENDIF.
      ENDDO.
      CLOSE DATASET ld_file.
    ENDIF.
    END-OF-SELECTION.
    loop at it_record INTO wa_record.
      write / wa_record-name1.
      write / wa_record-name2.
      write / wa_record-age.
    Endloop.

    Hi,
    Am attaching the file I used. There's no empty line after the second record.
    After execute, it is showing:
    Joe     Adams     20
         0
    John     Smith     40
         0
    May I know why there's 0, where did i do wrong?
    Thank you.

  • Fill a table with multiple records

    REPORT  REPORT1.
    DATA: wa_itab1  LIKE TABLE1.
    DATA: wa_itab2  LIKE TABLE2.
    DATA: itab1 TYPE STANDARD TABLE OF TABLE1,
          itab2 TYPE STANDARD TABLE OF TABLE2.
    DATA: v_dat TYPE d VALUE '20080101'.
    SELECT * FROM TABLE1 INTO TABLE itab1.
    LOOP AT itab1 INTO wa_itab1.
      wa_itab2-FIELD1 = wa_itab1-FIELD1.
      wa_itab2-FIELD2 = wa_itab1-FIELD2.
      wa_itab2-FIELD3 = wa_itab1-FIELD3.
      wa_itab2-FIELD4 = v_dat. "pass the initialized date
      APPEND wa_itab2 TO itab2.
      v_dat = v_dat + 1. " increment the date
      IF v_dat GT '20080105'.
        EXIT.
      ENDIF.
    ENDLOOP.
    MODIFY TABLE2 FROM TABLE itab2.
    I have the program above which is not doing exactly what I need.  Lets say TABLE1 has 3 records
    FIELD1 FIELD2     FIELD3
    PLANT1 STOR_LOC1  20
    PLANT2 STOR_LOC2  30
    PLANT3 STOR_LOC3  40
    The loop is for 5 days so in TABLE2 I want to see the following
    FIELD1 FIELD2     FIELD3  FIELD4
    PLANT1 STOR_LOC1  20     20080101
    PLANT2 STOR_LOC2  30     20080101
    PLANT3 STOR_LOC3  40     20080101
    PLANT1 STOR_LOC1  20     20080102
    PLANT2 STOR_LOC2  30     20080102
    PLANT3 STOR_LOC3  40     20080102
    PLANT1 STOR_LOC1  20     20080103
    PLANT2 STOR_LOC2  30     20080103
    PLANT3 STOR_LOC3  40     20080103
    PLANT1 STOR_LOC1  20     20080104
    PLANT2 STOR_LOC2  30     20080104
    PLANT3 STOR_LOC3  40     20080104
    PLANT1 STOR_LOC1  20     20080105
    PLANT2 STOR_LOC2  30     20080105
    PLANT3 STOR_LOC3  40     20080105
    At the moment the program gives me
    FIELD1 FIELD2     FIELD3  FIELD4
    PLANT1 STOR_LOC1  20     20080101
    PLANT2 STOR_LOC2  30     20080101
    PLANT3 STOR_LOC3  40     20080101
    Do I need a WHERE clause and if so how do I add assuming that the equal fields are FIELD1 and FIELD2? Thanks

    I have added a DO condition to the program and tried a couple of attempts.  The latest is below.  With this attempt I get 80,000+ records the majority of which do not have the fields filled.  Thanks
    REPORT REPORT1.
    DATA: wa_itab1 LIKE TABLE1.
    DATA: wa_itab2 LIKE TABLE2.
    DATA: itab1 TYPE STANDARD TABLE OF TABLE1,
    itab2 TYPE STANDARD TABLE OF TABLE2.
    DATA: v_dat TYPE d VALUE '20080101'.
    SELECT * FROM TABLE1 INTO TABLE itab1.
    DO v_dat+1 TIMES.
    LOOP AT itab1 INTO wa_itab1.
    wa_itab2-FIELD1 = wa_itab1-FIELD1.
    wa_itab2-FIELD2 = wa_itab1-FIELD2.
    wa_itab2-FIELD3 = wa_itab1-FIELD3.
    wa_itab2-FIELD4 = v_dat. "pass the initialized date
    APPEND wa_itab2 TO itab2.
    v_dat = v_dat + 1. " increment the date
    IF v_dat GT '20080105'.
    EXIT.
    ENDIF.
    ENDLOOP.
    ENDDO.
    MODIFY TABLE2 FROM TABLE itab2.

  • Problem when updating af:table with new records

    Hi,
    I have a page that shows two tables from the same DB table but with different VOs.
    Table1 displays records where date_column is within the current month, table2 displays all records.
    The problem is that when I add new record and return to the page, I find out that the new record has been added to both tables, it’s shown in table1 even though its date is not within this month.
    When I run the page again the problem is solved and everything is in the right place !!
    How can I fix this?

    Hi,
    you will have to re-query the iterators because you add the new row to a VO - which is an iterator - that wont filter your input (instead you add to a filtered iterator). However, its strange that both tables show that value because if these are different VO they should be independent. Only if they are instances of the same VO tehy are expected to show the same data
    Frank

  • Joining Three Tables with multiple record

    Dear All
    we need some help. We have Three Tables in sqlserver2012
    Master Table
    OrderID       PackageID      CustomerName
    1                          1               Abc
    2                          2                Bcd
    3                          1                xyz
    Child1 Table
    OrderID          ControlName
    1                   Row1COlumn1             (It Means Pant in Red Color is selected by user(relation with Child2 Table))
    1                   Row3Column1             (It Means Gown in Blue Color is selected by user(relation with Child2 Table))
    1                   Row4Column3             (It Means T Shirt in White Color is selected by user(relation with Child2 Table))
    2                    Row1Column2            (It Means Tie in Green Color is selected by user(relation with Child2 Table))
    2                   Row3Column1            (It Means Bow in Red Color is selected by user(relation with Child2 Table))
    Child2 Table
    PackageID      Product      Color1     Color2    Color3
    1                       Pant        Red          Green     Blue    
    1                       Shirt        Blue      Pink    Purple
    1                       Gown         Blue      Black    Yellow
    1                       T Shirt     Red          Green     White
    2                       Tie         Red          Green     White
    2                       Socks       Red          Green     White
    2                       Bow         Red          Green     White
    We want to have result like
    OrderID    PackageID      CustomerName   Pant    Gown  T Shirt     Tie         Bow  
    1                     1                 ABC               Red     Blue    White      x    
          x
                                                                   Blue
    2                      2                 Bcd                 x         x          x
           Green      Red
    I have tried 
    ;with mycte as (
    select  ms.OrderID,ms.PackageID
    ,ms.CustomerName
    , Replace(stuff([ControlName], charindex('Column',ControlName),len(ControlName),''),'Row','')  rowNum 
    ,Replace(stuff([ControlName], 1, charindex('Column',ControlName)-1 ,''),'Column','') columnNum 
    From  child1 c inner join MasterTable ms on c.Orderid=ms.orderid)
    ,mycte1 as (
    select *, row_number() Over(Partition By PackageID Order By Child2ID) rn from child2
    ,mycte2 as (
    Select m.OrderID,m.PackageID, m.CustomerName, m.ColumnNum,  m1.Product 
    --,m1.Color1 , m1.Color2, m1.Color3 
    , Case WHEN ColumnNum= 1 Then Color1 
     WHEN ColumnNum= 1 Then Color1 
      WHEN ColumnNum= 2 Then Color2 
       WHEN ColumnNum= 3 Then Color3 End Colors  
    from mycte m 
    join mycte1 m1 on m.rowNum=m1.rn and m.PackageID=m1.PackageID)
    Select OrderID,PackageID,CustomerName, ISNULL(Max(Case WHen Product='Pant' Then Colors END),'X') as 'Pant'
    , ISNULL(Max(Case WHen Product='Gown' Then Colors END),'X') as 'Gown'
    , ISNULL(Max(Case WHen Product='T Shirt' Then Colors END),'X') as 'T Shirt'
    , ISNULL(Max(Case WHen Product='Tie' Then Colors END),'X') as 'Tie'
    , ISNULL(Max(Case WHen Product='Bow' Then Colors END),'X') as 'Bow'
    FROM mycte2
     Group by OrderID,PackageID, CustomerName
    it works if we have a product in one color only. like if we have pant in red and blue then its showing just first record
    Thanks and Best Regards Umair

    Are you really storing textual values like "Row3Column1" or "Row4Column3"???
    Your model is a mess. Redesign it.. btw, these kind of models are quite complex.
    USE tempdb;
    GO
    CREATE TABLE dbo.Colors
    ColorID INT NOT NULL ,
    ColorName NVARCHAR(255) NOT NULL ,
    CONSTRAINT PK_Colors PRIMARY KEY ( ColorID )
    CREATE TABLE dbo.Products
    ProductID INT NOT NULL ,
    ProductName NVARCHAR(255) NOT NULL ,
    CONSTRAINT PK_Products PRIMARY KEY ( ProductID ) ,
    CONSTRAINT UQ_Products_ProductName UNIQUE ( ProductName )
    CREATE TABLE dbo.Packages
    PackageID INT NOT NULL ,
    CONSTRAINT PK_Packages PRIMARY KEY ( PackageID )
    CREATE TABLE dbo.PackageDetails
    ColorID INT NOT NULL ,
    PackageID INT NOT NULL ,
    ProductID INT NOT NULL ,
    CONSTRAINT PK_PackageDetails PRIMARY KEY ( ColorID, PackageID, ProductID ) ,
    CONSTRAINT FK_PackageDetails_ColorID FOREIGN KEY ( ColorID ) REFERENCES dbo.Colors ( ColorID ) ,
    CONSTRAINT FK_PackageDetails_PackageID FOREIGN KEY ( PackageID ) REFERENCES dbo.Packages ( PackageID ) ,
    CONSTRAINT FK_PackageDetails_ProductID FOREIGN KEY ( ProductID ) REFERENCES dbo.Products ( ProductID )
    CREATE TABLE dbo.Orders
    OrderID INT NOT NULL ,
    CustomerID INT NOT NULL ,
    PackageID INT NOT NULL ,
    CONSTRAINT PK_Orders PRIMARY KEY ( OrderID ) ,
    CONSTRAINT UQ_Orders_CustomerID UNIQUE ( OrderID, PackageID ) ,
    CONSTRAINT FK_Orders_PackageID FOREIGN KEY ( PackageID ) REFERENCES dbo.Packages ( PackageID )
    CREATE TABLE dbo.OrderDetails
    ColorID INT NOT NULL ,
    OrderID INT NOT NULL ,
    PackageID INT NOT NULL ,
    ProductID INT NOT NULL ,
    CONSTRAINT FK_OrderDetails_Orders FOREIGN KEY ( OrderID, PackageID ) REFERENCES dbo.Orders ( OrderID, PackageID ) ,
    CONSTRAINT FK_OrderDetails_PackageDetails FOREIGN KEY ( ColorID, PackageID, ProductID ) REFERENCES dbo.PackageDetails ( ColorID, PackageID, ProductID )
    GO
    INSERT INTO dbo.Colors
    ( ColorID, ColorName )
    VALUES ( 1, 'Red' ),
    ( 2, 'Green' ),
    ( 3, 'Blue' ),
    ( 4, 'Pink' ),
    ( 5, 'Purple' ),
    ( 6, 'Black' ),
    ( 7, 'Yellow' ),
    ( 8, 'White' );
    INSERT INTO dbo.Products
    ( ProductID, ProductName )
    VALUES ( 1, 'Pant' ) ,
    ( 2, 'Shirt' ) ,
    ( 3, 'Gown' ) ,
    ( 4, 'T Shirt' ) ,
    ( 5, 'Tie' ) ,
    ( 6, 'Socks' ) ,
    ( 7, 'Bow' );
    INSERT INTO dbo.Packages
    ( PackageID )
    VALUES ( 1 ),
    ( 2 );
    INSERT INTO dbo.PackageDetails
    ( PackageID, ProductID, ColorID )
    VALUES ( 1, 1, 1 ),
    ( 1, 2, 3 ),
    ( 1, 3, 3 ),
    ( 1, 4, 1 ),
    ( 2, 5, 1 ),
    ( 2, 6, 1 ),
    ( 2, 7, 1 ),
    ( 1, 1, 2 ),
    ( 1, 2, 4 ),
    ( 1, 3, 6 ),
    ( 1, 4, 2 ),
    ( 2, 5, 2 ),
    ( 2, 6, 2 ),
    ( 2, 7, 2 ),
    ( 1, 1, 3 ),
    ( 1, 2, 5 ),
    ( 1, 3, 7 ),
    ( 1, 4, 8 ),
    ( 2, 5, 8 ),
    ( 2, 6, 8 ),
    ( 2, 7, 8 );
    INSERT INTO dbo.Orders
    ( OrderID, PackageID, CustomerID )
    VALUES ( 1, 1, 1 ),
    ( 2, 2, 2 ),
    ( 3, 1, 3 );
    INSERT INTO dbo.OrderDetails
    ( ColorID, OrderID, PackageID, ProductID )
    VALUES ( 1, 1, 1, 1 ),
    ( 3, 1, 1, 3 ),
    ( 8, 1, 1, 4 ),
    ( 2, 2, 2, 5 ),
    ( 1, 2, 2, 7 );
    GO
    SELECT *
    FROM dbo.Orders O
    INNER JOIN dbo.OrderDetails OD ON OD.OrderID = O.OrderID
    INNER JOIN dbo.Products P ON P.ProductID = OD.ProductID
    INNER JOIN dbo.Colors C ON C.ColorID = OD.ColorID;
    GO
    DROP TABLE dbo.OrderDetails;
    DROP TABLE dbo.Orders;
    DROP TABLE dbo.PackageDetails;
    DROP TABLE dbo.Packages;
    DROP TABLE dbo.Products;
    DROP TABLE dbo.Colors;
    GO

Maybe you are looking for