Comparing Data in col of 2 tables - with a Calculation
There are 20 records in 2 different tables (A&B). The records pertain to periods between Jan 07 and March 09. There is a business logic that says that all the 15 records which fall between Jan 07 and Dec 08; their amount needs to be changed in Table B. While the amount for remaining 5 records that fall between Jan 09 and March 09 should remain the same. The formulae to be applied for the first 15 records is “amount/.50*0.125” and this result amount should reflect in the new table under the amount column.
Now the task to ensure that the calculation has happened correctly from Table A for those 15 records that fall between Jan 2007 and Dec 2008 in Table B and that the amount is the same for records for period after Jan 2009. I’d only be testing that the new amount after the business logic calculation reflects in the new amount column of Table B.
A sql statement is required for this.
Thanks,
Dush
you might want to give this pseudo code a try
update [2nd table]
set amount = (select t.amount / .50 * 0.125
from (select id, rownum rn, amount
from [1st table]
where period_date between '01-JAN-07' and '31-MAR-09'
order by id) t
where t.rn <= 15
and t.id = [2nd table].id)
where id in (select t.id
from (select id, rownum rn, amount
from [1st table]
where period_date between '01-JAN-07' and '31-MAR-09'
order by id) t
where t.rn <= 15)still it's better if you can post the actual tables, columns, and some sample data
Similar Messages
-
Excel data transfer into SAP internal table with GUI_UPLOAD
hi all,
i m using SRM4 system and i wanted to develop one report which will upload data from excel and convert it into IT.
i know that many threads are posted on this topic.
but my requirement is slight different. in the system only one function module is available that is "GUI_UPLOAD" and we want that user shd not save file as tab delimited before calling this fm. instead, program shd take care of all these things...
please suggest something asap..
helpful ans will be rewarded..
thanks,
jigs.Dear Jigs,
Please go though the following lines of code:
D A T A D E C L A R A T I O N *
TABLES: ANEP,
BKPF.
TYPES: BEGIN OF TY_TABDATA,
MANDT LIKE SY-MANDT, " Client
ZSLNUM LIKE ZSHIFTDEPN-ZSLNUM, " Serial Number
ZASSET LIKE ZSHIFTDEPN-ZASSET, " Original asset that was transferred
ZYEAR LIKE ZSHIFTDEPN-ZYEAR, " Fiscal Year
ZPERIOD LIKE ZSHIFTDEPN-ZPERIOD, " Fiscal Period
ZSHIFT1 LIKE ZSHIFTDEPN-ZSHIFT1, " Shift No. 1
ZSHIFT2 LIKE ZSHIFTDEPN-ZSHIFT1, " Shift No. 2
ZSHIFT3 LIKE ZSHIFTDEPN-ZSHIFT1, " Shift No. 3
END OF TY_TABDATA.
Declaration of the Internal Table with Header Line comprising of the uploaded data.
DATA: BEGIN OF IT_FILE_UPLOAD OCCURS 0.
INCLUDE STRUCTURE ALSMEX_TABLINE. " Rows for Table with Excel Data
DATA: END OF IT_FILE_UPLOAD.
S E L E C T I O N - S C R E E N *
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME,
BEGIN OF BLOCK B2 WITH FRAME.
PARAMETERS: P_FNAME LIKE RLGRAP-FILENAME OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK B2,
END OF BLOCK B1.
E V E N T : AT S E L E C T I O N - S C R E E N *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = SYST-REPID
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
STATIC = 'X'
MASK = '.'
CHANGING
FILE_NAME = P_FNAME
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
E V E N T : S T A R T - O F - S E L E C T I O N *
START-OF-SELECTION.
Upload Excel file into Internal Table.
PERFORM UPLOAD_EXCEL_FILE.
Organize the uploaded data into another Internal Table.
PERFORM ORGANIZE_UPLOADED_DATA.
E V E N T : E N D - O F - S E L E C T I O N *
END-OF-SELECTION.
*& Form UPLOAD_EXCEL_FILE
text
--> p1 text
<-- p2 text
FORM UPLOAD_EXCEL_FILE .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FNAME
I_BEGIN_COL = 1
I_BEGIN_ROW = 3
I_END_COL = 7
I_END_ROW = 32000
TABLES
INTERN = IT_FILE_UPLOAD
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " UPLOAD_EXCEL_FILE
*& Form ORGANIZE_UPLOADED_DATA
text
--> p1 text
<-- p2 text
FORM ORGANIZE_UPLOADED_DATA .
SORT IT_FILE_UPLOAD BY ROW
COL.
LOOP AT IT_FILE_UPLOAD.
CASE IT_FILE_UPLOAD-COL.
WHEN 1.
WA_TABDATA-ZSLNUM = IT_FILE_UPLOAD-VALUE.
WHEN 2.
WA_TABDATA-ZASSET = IT_FILE_UPLOAD-VALUE.
WHEN 3.
WA_TABDATA-ZYEAR = IT_FILE_UPLOAD-VALUE.
WHEN 4.
WA_TABDATA-ZPERIOD = IT_FILE_UPLOAD-VALUE.
WHEN 5.
WA_TABDATA-ZSHIFT1 = IT_FILE_UPLOAD-VALUE.
WHEN 6.
WA_TABDATA-ZSHIFT2 = IT_FILE_UPLOAD-VALUE.
WHEN 7.
WA_TABDATA-ZSHIFT3 = IT_FILE_UPLOAD-VALUE.
ENDCASE.
AT END OF ROW.
WA_TABDATA-MANDT = SY-MANDT.
APPEND WA_TABDATA TO IT_TABDATA.
CLEAR: WA_TABDATA.
ENDAT.
ENDLOOP.
ENDFORM. " ORGANIZE_UPLOADED_DATA
In the subroutine --> ORGANIZE_UPLOADED_DATA, data are organized as per the structure declared above.
Regards,
Abir
Don't forget to award points * -
How to compare Date in the TextField or DateTime with Date/Time field?
Hi All,
I am facing an issue with respect Date comparinson. I tried to look into entire discussions but failed to get the answer.
My issue is: I wanted to comparet Date/time field value with Date value which is in TextField.
The functionality of my form is:
I have dropdown list which lists the registered customer ids binded to XML Datasource. On selection of the customer id from the dropdown I am displaying customer registration date in the TextField or say Date/Time field as below code in dropdown change event.
RegistrationDetails.PurchaseEntry.txtRegDate.rawValue = regDataNode.CREATION_DATE.value; (this is TextField control)
In form I have an Date/Time field in which use will select the date of item purchase. In the validation part I want to make sure that, the purchase date selected in Date/Time field must be greater than the Customer Registraiton Date. I able to compare if the customer selects the date from two different Date/Time fields. But how to compare the dates which one is in Date/Time field and Date is in TextField?
I have tried using Num2Date and Date2Num with "YYYY-MM-DD" format to compare but not succeed!
Can you guys help me in this? Thanks in advance
Regards.Hi,
Yes, I am able to display the date which I have assigned to the text box. In the message box it show the value as '31/05/2009', since in this format i am assigining the date in the text box.
Here is the code which I am assigning the value:
RegistrationDetails.PurchaseEntry.txtRegDate.rawValue = regDataNode.CREATION_DATE.value;
Do I need to change the format while assigning value in text box?
You have told that, you have attached your test form, nothing is the reply. Can you repost the file?
Regards. -
Create new table with new calculated entries
Hi,
I got a little problem.
I have a table which includes the vacations times of employees. The vacation time was periodic ,so I split them in to days. Now I want to calculate the exact days.Sometimes there are weekends included which I have to subtract. I flaged every day, that I exactly know which day is a working day and which one isn't. Is there a way that I only sum the working days without the weekends?
Table Vacation_Times:
Empl --- V_Start_D --- V_End_D --- Date --- Days --- D_Name
Mr.A --- 01.05.11 --- 06.05.11 --- 01.05.11 --- 6 --- Wednesday
Mr-A --- 01.05.11 --- 06.06.11 --- 02.05.11 --- 6 --- Thursday
Mr.A --- 01.05.11 --- 06.05.11 --- 03.05.11 --- 6 --- Friday
Mr-A --- 01.05.11 --- 06.06.11 --- 04.05.11 --- 6 --- Saturday
Mr.A --- 01.05.11 --- 06.05.11 --- 05.05.11 --- 6 --- Sunday
Mr-A --- 01.05.11 --- 06.06.11 --- 06.05.11 --- 6 --- Monday
NEW table:
Empl --- V_Start_D --- V_End_D --- Date --- Days --- D_Name --- Actual_Days
Mr.A --- 01.05.11 --- 06.05.11 --- 01.05.11 --- 6 --- Wednesday --- 4
Mr-A --- 01.05.11 --- 06.06.11 --- 02.05.11 --- 6 --- Thursday --- 4
Mr.A --- 01.05.11 --- 06.05.11 --- 03.05.11 --- 6 --- Friday --- 4
Mr-A --- 01.05.11 --- 06.06.11 --- 04.05.11 --- 6 --- Saturday --- 4
Mr.A --- 01.05.11 --- 06.05.11 --- 05.05.11 --- 6 --- Sunday --- 4
Mr-A --- 01.05.11 --- 06.06.11 --- 06.05.11 --- 6 --- Monday --- 4
thxHi,
try
SELECT Empl ,V_Start_D ,V_End_D ,Date ,Days ,D_Name , count(*) as Actual_Days
FROM vacation v
JOIN datelist d ON d.day between V_Start_D and V_End_D and d.is_working_day='Y'
GROUP BY Empl ,V_Start_D ,V_End_D ,Date ,Days ,D_Name Regards,
Carsten. -
Can I reference a table with a calculated value?
I have monthly tables named by Roman numerals that correlate to the each month(Jan = I, Feb=II, Mar=III) and in a cell, want to reference the current month's table by using ROMAN(MONTH(TODAY()) :: B2 because it seems I cannot use numbers for table names as a reference. Although, this throws a syntax error at me too. Anyone have a solution or an alternative? Thanks!
I'm on iCloud Numbers, btw.=INDIRECT(ROMAN(MONTH(TODAY()))&"::B2")
I don't know what problem you are having with table names that use regular digits. If your table was named "3" instead of "III", the formula would be:
=INDIRECT(MONTH(TODAY())&"::B2") which, on the day ofthis post, corresponds to 3::B2 -
Complicated Table with Complicated Calculations
I am making a table within a form that is slightly complicated. I want teachers from six different zones to be able to fill in how many students travelled for how many nights and then have the total automatically calculate. The problem is that the total changes depending on the zone and how many nights away. For example for zone 2 the amount is $5 per student no matter how long they were away. However, for Zone 6 two nights away is calculated at $90 per student whereas three nights away is calculated at $100 and four nights away at $130 per night. Does anyone have a suggestion for how to set up this table? The six zones in the first column are drop down menus with the various school districts that fall into each zone allowing the teacher to choose which school district they are in and the corresponding row to fill in. Thank you.
ElaineIf you need something other than a contiguous piece of another table, say, something more like a query, you might check out the techniques I have posted for others problems in this forum. See the following messages:
Queries in Numbers
Extracting unique values from a list of values
In each case you'll find a link to an example Numbers file that uses this technique to solve the problem in the thread. Perhaps you can adapt it to your situation. If you have trouble, let me know. -
SQL 2008 how to compare & identify data among 2 tables with same structure ?
Hello is there a TSQL way of comparing row by row for example comparing DateTimeStamp field in 2 separate tables with same structure in identifying if it's data was changed (If Table1.DateField > Table2.DateField THEN UPDATE it's entire row to match it's
corresponding Table1 row.) ?
Probably thinking would need a cursor to loop through or are there other better ways via TSQL ?
Thanks in advance.Hi,
I am assuming you have a PRIMARY KEY field or a UNIQUE field in both tables, which you should!
You can do this using "UPDATE with INNER JOIN". (SQL Server – Update Table with INNER JOIN)
Working example:
USE [TestDatabase]
GO
/* Create Temp Tables */
CREATE TABLE [dbo].[Table1]
[ID] INT
,[Name] VARCHAR(10)
,[ModifyDate] DATETIME
CREATE TABLE [dbo].[Table2]
[ID] INT
,[Name] VARCHAR(10)
,[ModifyDate] DATETIME
GO
INSERT INTO [dbo].[Table1] ([ID], [Name], [ModifyDate]) VALUES (1, 'Vishal', GETDATE())
INSERT INTO [dbo].[Table2] ([ID], [Name], [ModifyDate]) VALUES (1, 'Gajjar', GETDATE() + 1)
GO
SELECT [ID], [Name], [ModifyDate] FROM [dbo].[Table1]
SELECT [ID], [Name], [ModifyDate] FROM [dbo].[Table2]
GO
UPDATE T1
SET T1.[Name] = T2.[Name]
FROM [dbo].[Table1] T1
INNER JOIN [dbo].[Table2] T2 ON T1.[ID] = T2.[ID] /* Join on Key field */
WHERE T2.[ModifyDate] > T1.[ModifyDate] /* Update criteria */
GO
/* CleanUp - Drop Tables
DROP TABLE [dbo].[Table1], [dbo].[Table2]
This Updates Table1 with latest values from Table2, You need to change the UPDATE statement for your scenario.
- Vishal
SqlAndMe.com -
Please Help: Trouble with nested CASE statement and comparing dates
Please tell me why the query below is always returning the bold null even when the start_date of OLD is greater than or equal to the start_date of NEW.
What I want to do is get the difference of the start_dates of two statuses ( Start_date of OLD - Start_date of NEW) if
1. end_date of NEW is not null
2. start_date of OLD is greater than start_date of NEW
else return null.
select id,
case when max(end_date) keep (dense_rank last order by decode(request_wflow_status,'New',1,0),start_date) is null then
null
else
case when max(decode(status,'OLD',start_date,null)) > max(decode(status,'NEW',start_date,null))
then max(decode(status,'OLD',start_date,null)) - max(decode(status,'NEW',start_date,null))
else
null
end
end result
from cc_request_status where id =1
group by id;Avinash,
Thank you for your help.. Here is a more description of my problem..
Here is a sample of data I have for a table with four columns (id,status,start_date,end_date)
What I need to do is to get difference of the start dates of the maximum available dates, if data is valid. The pseducode is as follows:
IF end_date of New status is null
THEN return null
ELSE
IF start_date of old >= start_date of new
THEN return (start_date of old - start_date of new)
ELSE return null
I used the following query but always return the bold null
select id,
(case when max(end_date) keep (dense_rank last order by decode(status,'new',1,0),start_date) is null then
null
else
(case when max(decode(status,'old',start_date,null)) >=
max(decode(status,'new',start_date,null))
then max(decode(status,'old',start_date,null)) - max(decode(status,'new',start_date,null))
else
null
end)
end) result
from tbl where id =1
Based on the below sample, I expected to get the following result; 14-Mar-07 - 16-Feb-07 which is the difference of the maximum start_dates of the two statuses. However the query is not working.. Please help me.. Thank you..
Id Status start_date end_date
1 new 03-Feb-07 07-Feb-07
1 new 16-Feb-07 21-Feb-07
1 old '10-Mar-07 12-Mar-07
1 old '14-Mar-07 16-Mar-07 -
How to compare date which is greatest date
iam new to sql
how to compare date which date is greatest date with example
can i use to_char to compare date
SELECT eno, ename, GREATEST (TBLE.MAX1, TBLE.MAX2) recent_date "
FROM (SELECT TBLA.eno, TBLA.ename, "
MAX (TO_CHAR (TBL.date1, 'MM/DD/YYYY HH24:MI') "
) MAX1, "
MAX (TO_CHAR (TBL.date2, 'MM/DD/YYYY HH24:MI') "
) MAX2 "
FROM dual TBL, dual2 TBLA
in above query if any one of the date having null value then recent_date is showing 'null'
and also it showing wrong value
example
date1='08-22-2009' and date2='01-23-2010' then it showing wrong recent_datel ike='08-22-2009'
as according my knowledge it is comparing with month it sholud not be like this wat i have to do pls explain with example my o/p should come for recent_date like =''01-23-2010''
Edited by: user9112274 on Aug 27, 2010 5:31 AMHi,
there are numerous ways to compare dates, i give you some examples:
with data_Sample as
(select to_date('01-jan-2001','dd-mon-yyyy') d1, to_date('01-mar-2002','dd-mon-yyyy') d2, to_date('03-feb-2002','dd-mon-yyyy') d3 from dual)
select greatest(d1,d2,d3) from data_Sample
GREATEST(D1,D2,D3)
3/1/2002
with data_Sample as
(select to_date('01-jan-2001','dd-mon-yyyy') d1 from dual union all
select to_date('01-mar-2002','dd-mon-yyyy') from dual union all
select to_date('03-feb-2002','dd-mon-yyyy') from dual)
select max(d1) from data_Sample
MAX(D1)
3/1/2002
declare
d1 date :=to_date('01-jan-2001','dd-mon-yyyy');
d2 date :=to_date('01-jan-2001','dd-mon-yyyy');
begin
if d1>d2 then
dbms_output.PUT_LINE('d1 greater than d2');
else
dbms_output.PUT_LINE('d1 less or equql than d2');
end if;
end;
output:
d1 less or equal than d2now concerning your question:
>
can i use to_char to compare date
>
If you have date data types : don't convert them.
if you have no choice, use something like:
if to_char(d1,'YYYYMMDD') > to_char(d2,'YYYYMMDD') then
else
end if;Take care when you convert a date into a char format it becomes string comparison (with all it implies) (It's the reason why i've use an explicit mask format). -
Export with expdp tables with name like 'name1%' or like 'name2%'
How can I export data and metadata only from tables with name like 'name1%' or like 'name2%'
what value must have INCLUDE parameter ?
from one match it is
INCLUDE=TABLE:"LIKE 'REF%' "
this exports tables witch name begins with REF, but I need tables REF and REF1
if I write like this:
INCLUDE=TABLE:"LIKE 'REF%' ",TABLE:"LIKE 'REF1%' "
or
INCLUDE=TABLE:"LIKE 'REF%' "
INCLUDE=TABLE:"LIKE 'REF1%' "
it says that
Total estimation using BLOCKS method: 0 KB
ORA-39168: Object path TABLE was not found.
ORA-31655: no data or metadata objects selected for job
I supose such constructions work like between them is logical AND.
I need an OR construction.C:\>EXPDP SCOTT/TIGER DIRECTORY=DATA_DIR DUMPFILE=EXPDATA.DMP INCLUDE=TABLE:"LIK
E'REF%'"
Export: Release 10.1.0.2.0 - Production on Saturday, 07 October, 2006 9:38
Copyright (c) 2003, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Produc
tion
With the Partitioning, OLAP and Data Mining options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": SCOTT/******** DIRECTORY=DATA_DIR DUMP
FILE=EXPDATA.DMP INCLUDE=TABLE:LIKE'REF%'Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . exported "SCOTT"."REF123" 9.406 KB 10 rows
. . exported "SCOTT"."REF12345" 9.414 KB 10 rows
. . exported "SCOTT"."REF1ABC" 9.406 KB 10 rowsMaster table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:
C:\EXPDATA.DMP
Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 09:38
C:\>
INCLUDE=TABLE:"LIKE 'REF1%'
no need to specify "ref1%" bcoz if u specify "ref%" it means all tables after "ref" will be export. -
How to update a table with strin that contains &
Hi,
I would like to update ename col of emp table with a string that contains &
update emp set ename = 'tom&jerry' where empno = 7369But this gives an error.Please advice.
Regards,Consult the sql*plus reference manual on how to disable the &
Software engineers should be capable of doing research themselves, please stop abusing this forum to increase your salary by being spoon fed for free.
Sybrand Bakker
Senior Oracle DBA -
How to Compare Data length of staging table with base table definition
Hi,
I've two tables :staging table and base table.
I'm getting data from flatfiles into staging table, as per requirement structure of staging table and base table(length of each and every column in staging table is 25% more to dump data without any errors) are different for ex :if we've city column with varchar length 40 in staging table it has 25 in base table.Once data is dumped into staging table I want to compare actual data length of each and every column in staging table with definition of base table(data_length for each and every column from all_tab_columns) and if any column differs length I need to update the corresponding row in staging table which also has a flag called err_length.
so for this I'm using cursor c1 is select length(a.id),length(a.name)... from staging_table;
cursor c2(name varchar2) is select data_length from all_tab_columns where table_name='BASE_TABLE' and column_name=name;
But we're getting data atonce in first query whereas in second cursor I need to get each and every column and then compare with first ?
Can anyone tell me how to get desired results?
Thanks,
Mahender.This is a shot in the dark but, take a look at this example below:
SQL> DROP TABLE STAGING;
Table dropped.
SQL> DROP TABLE BASE;
Table dropped.
SQL> CREATE TABLE STAGING
2 (
3 ID NUMBER
4 , A VARCHAR2(40)
5 , B VARCHAR2(40)
6 , ERR_LENGTH VARCHAR2(1)
7 );
Table created.
SQL> CREATE TABLE BASE
2 (
3 ID NUMBER
4 , A VARCHAR2(25)
5 , B VARCHAR2(25)
6 );
Table created.
SQL> INSERT INTO STAGING VALUES (1,RPAD('X',26,'X'),RPAD('X',25,'X'),NULL);
1 row created.
SQL> INSERT INTO STAGING VALUES (2,RPAD('X',25,'X'),RPAD('X',26,'X'),NULL);
1 row created.
SQL> INSERT INTO STAGING VALUES (3,RPAD('X',25,'X'),RPAD('X',25,'X'),NULL);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT * FROM STAGING;
ID A B E
1 XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX
2 XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX
3 XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX
SQL> UPDATE STAGING ST
2 SET ERR_LENGTH = 'Y'
3 WHERE EXISTS
4 (
5 WITH columns_in_staging AS
6 (
7 /* Retrieve all the columns names for the staging table with the exception of the primary key column
8 * and order them alphabetically.
9 */
10 SELECT COLUMN_NAME
11 , ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) RN
12 FROM ALL_TAB_COLUMNS
13 WHERE TABLE_NAME='STAGING'
14 AND COLUMN_NAME != 'ID'
15 ORDER BY 1
16 ), staging_unpivot AS
17 (
18 /* Using the columns_in_staging above UNPIVOT the result set so you get a record for each COLUMN value
19 * for each record. The DECODE performs the unpivot and it works if the decode specifies the columns
20 * in the same order as the ROW_NUMBER() function in columns_in_staging
21 */
22 SELECT ID
23 , COLUMN_NAME
24 , DECODE
25 (
26 RN
27 , 1,A
28 , 2,B
29 ) AS VAL
30 FROM STAGING
31 CROSS JOIN COLUMNS_IN_STAGING
32 )
33 /* Only return IDs for records that have at least one column value that exceeds the length. */
34 SELECT ID
35 FROM
36 (
37 /* Join the unpivoted staging table to the ALL_TAB_COLUMNS table on the column names. Here we perform
38 * the check to see if there are any differences in the length if so set a flag.
39 */
40 SELECT STAGING_UNPIVOT.ID
41 , (CASE WHEN ATC.DATA_LENGTH < LENGTH(STAGING_UNPIVOT.VAL) THEN 'Y' END) AS ERR_LENGTH_A
42 , (CASE WHEN ATC.DATA_LENGTH < LENGTH(STAGING_UNPIVOT.VAL) THEN 'Y' END) AS ERR_LENGTH_B
43 FROM STAGING_UNPIVOT
44 JOIN ALL_TAB_COLUMNS ATC ON ATC.COLUMN_NAME = STAGING_UNPIVOT.COLUMN_NAME
45 WHERE ATC.TABLE_NAME='BASE'
46 ) A
47 WHERE COALESCE(ERR_LENGTH_A,ERR_LENGTH_B) IS NOT NULL
48 AND ST.ID = A.ID
49 )
50 /
2 rows updated.
SQL> SELECT * FROM STAGING;
ID A B E
1 XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX Y
2 XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX Y
3 XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXHopefully the comments make sense. If you have any questions please let me know.
This assumes the column names are the same between the staging and base tables. In addition as you add more columns to this table you'll have to add more CASE statements to check the length and update the COALESCE check as necessary.
Thanks! -
How to compare two rows from two table with different data
how to compare two rows from two table with different data
e.g.
Table 1
ID DESC
1 aaa
2 bbb
3 ccc
Table 2
ID DESC
1 aaa
2 xxx
3 ccc
Result
2Create
table tab1(ID
int ,DE char(10))
Create
table tab2(ID
int ,DE char(10))
Insert
into tab1 Values
(1,'aaa')
Insert
into tab1 Values
(2,'bbb')
Insert
into tab1 Values(3,'ccc')
Insert
into tab1 Values(4,'dfe')
Insert
into tab2 Values
(1,'aaa')
Insert
into tab2 Values
(2,'xx')
Insert
into tab2 Values(3,'ccc')
Insert
into tab2 Values(6,'wdr')
SELECT
tab1.ID,tab2.ID
As T2 from tab1
FULL
join tab2 on tab1.ID
= tab2.ID
WHERE
BINARY_CHECKSUM(tab1.ID,tab1.DE)
<> BINARY_CHECKSUM(tab2.ID,tab2.DE)
OR tab1.ID
IS NULL
OR
tab2.ID IS
NULL
ID column considered as a primary Key
Apart from different record,Above query populate missing record in both tables.
Result Set
ID ID
2 2
4 NULL
NULL 6
ganeshk -
Comparing InfoProvider table (Master Data P table) with the contents of the
I have compared the contents of the ODS and the InfoProvider (it is an InfoObject). I have compared by just going to the tables and selecting the Number of Entries option. However, the InfoPackage load (which is an Init) shows a failure and there are red squares next to the last six packets. Should I do a manual update of these packages anyway and if I do is there any consequences ie duplicate records. Thanks
Hi Niten,
as already explained, there is no problem to do a manual update of single packages...anyway, if you are not sure or you don't feel this procedure much safe, you can load all again starting from PSA (if your load fail AFTER all data was uploaded in BW)...
Bye,
ROberto -
Compare data between two tables of same schema
Folks,
I have one very intresting query which i would like to share with you all and looking forward for the solution asap.
Scenario
I have two table say TableA and TableB, both having same structre say as below
TableA
Col1 Var(10)
Col2 INT
TableB
Col1 Var(10)
Col2 INT
I want to compare data between these two tables and store compared data into third table, let me expalin the whole scenario.
TableA
ColA ColB
INDIA 1
PAKistan 2
TableB
ColA ColB
INDIA 1
PAK 3
I want result like
Difference
ColA ColB
True 0
False -1
I want to store this difference in thrid table.
i.e. when comparing text, i need TRUE when compare 100% else False, Caption is not considered.
When comparing numeric value, simple sub is requried , TableA-TableB
Note - I dont want to use any external tool to compare the table data, i required sql query to do the same.
Thanks
Amit Srivastava
Amit
Please mark as answer if helpful
http://fascinatingsql.wordpress.com/Whereas the abbreviation of countries that exist in Table2 table are the first three letters of the name of the country*, here's a suggestion:
-- code #1 v2
INSERT into [Difference] (Col1, Col2, ACol1, BCol1)
SELECT case when A.Col1 = B.Col1 then 'true' else 'false' end,
(IsNull(A.Col2, 0) - IsNull(B.Col2, 0)), A.Col1, B.Col1
from TableA as A full outer join
TableB as B on (A.Col1 = B.Col1
or Left(A.Col1, 3) = B.Col1);
Is the COLLATE database case insensitive? If not, the code #1 above will have to be modified, using the upper () function or using COLLATE case insensitive in A.Col1 and B.Col1 columns.
But if the abbreviation of the country follow the
ISO 3166-1 alpha-3 standard, will require a fourth table containing the symbol and name of countries.
-- code #2 v2
;with
TableB_2 as (
SELECT case when Len(Col1) = 3
then (SELECT Country_name from [ISO 3166-1 a3] where Cod = Col1)
else Col1 end as Col1, Col2
from TableB
INSERT into [Difference] (Col1, Col2, ACol1, BCol1)
SELECT case when A.Col1 = B.Col1 then 'true' else 'false' end,
(IsNull(A.Col2, 0) - IsNull(B.Col2, 0)), A.Col1, B.Col1
from TableA as A full outer join
TableB_2 as B on A.Col1 = B.Col1;
Structure and data to test:
use tempdb;
CREATE TABLE TableA (Col1 varchar(10), Col2 int);
CREATE TABLE TableB (Col1 varchar(10), Col2 int);
CREATE TABLE [Difference] (Col1 varchar(10), Col2 int, ACol1 varchar(10), BCol1 varchar(10));
INSERT into TableA values ('INDIA', 1), ('PAKistan', 2), ('China', 12);
INSERT into TableB values ('INDIA', 1), ('PAK', 3), ('Bhutan', 3);
go
CREATE TABLE [ISO 3166-1 a3] (Cod char(3) primary key, [Country_name] varchar(30));
INSERT into [ISO 3166-1 a3] values
('IND', 'India'), ('PAK', 'Pakistan'), ('CHN', 'China'), ('BGD', 'Bangladesh'),
('BTN', 'Bhutan'), ('MMR', 'Myanmar'), ('NPL', 'Nepal');
go
(*) If the short form of the country name using the first three letters of the country name,
false positives can occur. For example,
Mali and Malta or
Angola and Anguilla.
José Diz Belo Horizonte, MG - Brasil
Maybe you are looking for
-
Best way to start a new catalog for 2009 ?
Hi, What's the best way to start a new catalog for the new year, with all the keywords and all the presets of the modules (without having to export all the folders) of previous catalog 2008 ? Thanks, Dominique
-
Hi, omniscient all! I have a code sample where I try to request some URL from an inactive server: declare l_text varchar2(32000); begin l_text := utl_http.request('http://inactive.url:7777'); exception when others then declare l_errco
-
Unable to uninstall Adobe Reader 7.0 (SSSecurity.api PLUG-IN missing) what should i do? I want to install adobe Reader 8.0 and first I would like to uninstall my Adobe Reader 7.0, However, when I click on Unistall, it says PLUG-IN SSSecurity.api is m
-
Is there any query to know the multiple users name from their ids?
is there any query to know the multiple users name from their ids?
-
Replacement drives for a Macbook Aluminum.
I'm thinking to boost performance by replacing the existing drive (160GB 5400rpm) with a larger and faster drive (250 or 320 GB 7200rpm). My question: offerings include drives with 1.5 mbps or 3.00 mbps, designated as 150 and 300 respectively. Will a