Julian day function Converting wrong values
Hi All
Please chek I am giving the command to convert the number value to words and I am getting wrong output. Please advise. This is urgent.
The Command I am giving is
select to_char(to_date('30540','J'),'JSP') from dual;
The return I am getting is
THIRTY THOUSAND FIFTY-FOUR.
My Database is Oracle 7.3
Again
SQL> select to_char(to_date('30540','J'),'JSP') from dual;
TO_CHAR(TO_DATE('30540','J'),'JSP'
THIRTY THOUSAND FIVE HUNDRED FORTY
Message was edited by:
jeneesh
Similar Messages
-
TO_Number Function showing wrong values
Hi All,
I am passing a Char value from oracle forms to oracle reports as parameter.
In Report Query I'm converting the char value into number for comparison using TO_NUMBER() function. As the char value is large value like '001002004006004' it is converting to something like 1.2e+12 and my query results goes wrong. I want value, something like 1002004006004( as initial 00 will be removed).
I'm using Oracle forms 10g and Reports 10g
Can anyone please help me.
Thanks
Sandeep
----Don't think outside the box, Think as if there is no Box at all.Hi, Sandeep,
Whenever you have a problem, post a little sample data (CREATE TABLE and INSERT statements) that shows what the problem is, and the correct results you want from that sample data. Explain how you get those results from that data.
See the forum FAQ: https://forums.oracle.com/message/9362002#9362002
Don't confuse how a number is displayed with what that number is. SQL*Plus (and other front ends), by default, allows only 10 character spaces for displaying NUMBERs. If you have a NUMBER that doesn't fit into 10 spaces, then SQL*Plus will round the digits after the decimal point. If it still doesn't fit (which is the case with 1002004006004) then SQL*Plus will use scientific notation, rounding the decimal places. The actual value (at least 38 significant digits) will be used in all computations, regardless of how the NUMBER is displayed. I doubt if what you posted has anything to do with the real problem. -
SUM function resulting WRONG values when some cell contains a string
A very strange problem that can result in wrong financial calculations and big mistakes...
If we have SUM function for some range of cells and one of them is treated as text string (I mean it's number in fact but Number is sure it's text string). than SUM function calulates ALL cells except this sell silently without errors and results in wrong result.
For example we have cells and values
A B
=====
1| 15 USD
2| 0 USD
3| 37 USD
4| 1 USD
5| 3 USD
here the function SUM(B1:B5) should provide the result "56 USD"
But if cell B5 is treated as text string (it can be still displayed as "3 USD" so we don't know it's treated as text string for some reason) than SUM(B1:B5) swill answer "53 USD".
The problem is we DON'T know cell B5 is treated as text and we are fully sure that we have the correct sum of all 5 cells, in reality we see sum of 4 cells only....
I think anybody working with financial or other important data can imagine how dangerous this SUM behaviour is.... I encountered several times that when importing data from Excel or by other ways numbers are imported as text strings. So if I have a lot of cells I'm not sure if all those cells are correctly styled or some of them for some unknown reason is treated as text string.
In Microsoft Excel there is a very right solution. In MS Excel if any cell in the SUM is wrong format the SUM function simply provides error as a result. But in Numbers SUM doesn't tell us about error, it simply provides us with a wrong result!
With formal logic the way SUM works in Numbers is total idiotism. If I ask to SUM B1:B5 than I definitely ask to sum ALL 5 cells, not 4, not 3, not 6 but 5 definite cells. If Numbers can't sum those exactly those 5 cells the only answer of the function should be ERROR.
But Apple Numbers answers me some result of summing those cells that it's able to sum. Apple Numbers SUM function is not confused that I asked for SUM of 5 (not 4 or 3) cells and I expect to have this sum as a result.
In fact Apple uses the right logic when we use another formula. If we use =B1B2+B3+B4B5 and any cell contains text string that we'll have error result the sam as in Microsoft Excel. So in this example Numbers behaves correctly.
So why SUM (B1:B5) can provide totally different result as =B1B2+B3+B4B5?alexb2 wrote:
So when I set format for my number as my local currency it's displayed as 123 XXX (XXX is my currency but it's not in latin). I see it's not only displayed but also stored as 123 XXX. That's different from Excel that stores only numbers in cells and shows number with prefix or suffix - Numbers storex number with prefix or suffix.
No, you get this behavior because the original sheet is displaying values as currencies. I assumes that the import process pass it as a string because he doesn't recognize it as a currency value. As far as I know, Numbers stores the currency entries as a pure number and an indicator of the used currency.
Here is an example.
(a) the description of the numerical value (I underlined it: 456)
<sf:number-cell sf:flags="4" sf:value="456" sf:col="1" sf:row="2">
<sf:cell-style-ref sfa:IDREF="SFTCellStyle-46"/>
<sf:content-size sfa:w="58.659881591796875" sfa:h="14"/>
</sf:number-cell>
(b) the description of the format (I underlined the used currency: XAM)
<sf:cell-style sfa:ID="SFTCellStyle-46" sf:cell-style-default-line-height="12" sf:parent-ident="tabular-Basic-body-cell-style-id">
<sf:property-map>
<sf:SFTCellStylePropertyNumberFormat>
<sf:number-format sfa:ID="SFTNumberFormat-23" sf:format-type="1" sf:format-string="#,##0.00 ¤;-#,##0.00 ¤" sf:format-decimal-places="2" sf:format-currency-code="XAM" sf:format-negative-style="0" sf:format-show-thousands-separator="true" sf:format-fraction-accuracy="-3" sf:format-use-accounting-style="false"/>
</sf:SFTCellStylePropertyNumberFormat>
<sf:SFTCellStylePropertyImplicitFormatType>
<sf:number sfa:number="256" sfa:type="i"/>
</sf:SFTCellStylePropertyImplicitFormatType>
<sf:SFTCellStylePropertyFormatType>
<sf:number sfa:number="257" sfa:type="i"/>
</sf:SFTCellStylePropertyFormatType>
</sf:property-map>
</sf:cell-style>
Of course, if the original currency string is not recognized, it can't be described as such a feature and the value is treated as a simple string.
So may be at some moment my 123 XXX is treated like string value.
Yes, find and replace is a nice tool when importing data - thanks for the tip. the last problem is with already Numbers files that were imported not today (or even createde as Numbers file) where some cell becomes string value after some editing.
Here again, if you edit a currency string and replace it to a not recognized one, the result will be logically a string.
There is an other way to give this result:
copy a value from a cell formatted as XAM currency (just an example)
paste it in a cell whose format is currency Euro (once again it's just an example).
The result will be a string.
The culprit is not the program, it's the user.
I had several times this situation and last time I found error only because I have my budget in 2 programs - in Numbers and in another special budgeting program. As each program has advantages I have in fact 2 instances of the same budget.
And when I changed some string in Numbers and another program I noticed the sum is different. I was sure it's another program somewhere buggy but noticed than Numbers simply ignores one of the budget strings and sums without it... In fact it was even not the string I changed, I remember I changed the buggy string about a week ago but I haven't compared budgets that time so my budget had a mistake for some time till I noticed it. If I used only Numbers without copy of budget in another program may be even today I won't notice the mistake.
The same situation happened not once.
I think that the choice made by Apple for SUM() is correct. You feel that it is wrong. It's useless to debate more, we will not change the behavior of the function.
I try to give a workaround.
The neater one is to add columns as I described in my first response.
The given formula will clearly flag cells which aren't containing numerical values. If you move the SUM from the original range to the new one, the oddities will be flagged automatically.
Here is an alternate workaround:
The currency is XAM.
In B4 I introduced a typo so the value is no longer a numerical one.
Given that, the sum in the footer doesn't count the 34 (which is the normal behavior).
In column C1 I entered =1*B
which flagged the bad cell.
The alternate is to use an auxiliary table like aux1
In A1 I entered:
=IF(ISERROR(INDIRECT(ADDRESS(ROW(),COLUMN(),,,"main"))),"",IF(ISBLANK(INDIRECT(A DDRESS(ROW(),COLUMN(),,,"main"))),"",1*INDIRECT(ADDRESS(ROW(),COLUMN(),,,"main") )))
Exactly the same formula in B1, C1, D1, …
So, the table will automatically grab the contents of the main table (just take care to insert more columns in aux1 than in main)
In the footer row of aux1, insert a sum formula for columns where there is required.
Looking at this footer will flag columns where a value may be "wrong" so, it will be necessary (but easy) to scan the column's content to find the red triangle(s).
Yvan KOENIG (from FRANCE lundi 13 octobre 2008 13:27:40) -
NODIM function Returns wrong values?
Hi All,
We have a KF Quantity in PC and we are using NODIM(Quantity) to diaply it without units.But
NODIM(Quantity) displays wrong results.
For Example:Quantity = 3123214 PC and NODIM(Quantity) = 3123214.123
What could be the reason for it?can anyone explain me?
Thanks
Message was edited by: MurliThanks for your wishes on the other post.
My advance wishes to you for the same..
Dear Murali,
I am not sure the following 'note' can help us.. please have a look..
Note number: 604857: ( Also have a look at 590089,730382)
Incorrect number of decimal places with NODIM operator
Symptom
The system produces an incorrect proposal for the number of decimal places for a structure element.
Other terms
Query, NODIM, decimals, decimal places
Reason and Prerequisites
The key figure uses the NODIM operator
Solution
BW 3.0B
Import Support Package 12 for 3.0B (BW 3.0B Patch 12 or SAPKW30B12) into your BW system. This Support Package will be available when note 523249 with the short text "SAPBWNews BW 3.0B Support Package 12", which describes this Support Package in more detail, is released for customers.
To provide information in advance, note 523249 may already be available before the Support Package is released. In this case, the short text will still contain the words "preliminary version".
BW 3.1C
Import Support Package 06 for 3.1C (BW 3.1C Patch06 or SAPKW31C06) into your BW system. This Support Package will be available when note 539827 with the short text "SAPBWNews BW 3.1C Support Package 06", which describes this Support Package in more detail, is released for customers. For more information on BW Support Packages, see note 110934.
In urgent cases, you can implement the correction instructions in your system using transaction SNOTE.
Regards,
Hari
Message was edited by: Hari Kiran Y -
Function modules for converting Char value to hexadecimal value
Hi All,
Function modules for converting Char value to hexadecimal value.
Thanks in advanceHi,
use this function module:
<b>RSS_UNIQUE_CONVERT_TO_HEX</b>
regards
Debjani
Rewards point for helpful answer -
Wrong value in java stored function
Hi All,
i have written a java stored function,
at the end of the code it insert record into the database
among other columns also a number(18,3) column,
when I debug it (out side of server) - works fine.
when I load it to database i get wrong values in column
(like instead of 76.546 i get 77.667) I can't figure out where it comes from.
I use big decimal in java code.
if i Hard code the value in java code it works fine!
am I missing something ?, calculations/ data type different out side then inside database? using oracle 10.2.0.2
Cheers
SaharHi
the code calculate some averages of amounts ( money) according to several
conditions,and parameters given to the function and stores the average into table in the database
the money columns are of data type 18,3 , both source and target tables have same structure.
thanks
Sahar -
Function module to convert float value to data type 'dec'
Hi experts,
In a report i need to convert float value to the data type 'DEC'. How to convert it. Is there any function module for this conversion.
Thanks and Regards,
Vaibhav Tiwari.Hi ..
We can do like this...
Data : V_float type F value '12345.67'.
Data: V_dec type P Decimals 2.
Write:/ V_float exponent 0. "This will display it like Type P
or
Write V_float to V_dec EXPONENT 0.
Write:/ V_dec.
reward if Helpful.
<b></b> -
RFC Function Error: Cannot convert a value of 'MM/DD/YYYY' from type java.l
hi experts,
iam calling an RFC using SAP_JCO_Function. one of the input parameters is date which shud be in the format 'MM/DD/YYYY' but when i create a transaction property of data type DATETIME the format changes to " 2007-06-21 14:31:50 ". to refrain form passing this value at run time i have defined the transaction property as string and defaulted the value to MM/DD/YYYY.
When i execute the RFC i get the error "Cannot convert a value of 'MM/DD/YYYY' from type java.l".
Issue is with time field as well. Any suggestions would be appreciated.
Thanks,
AvinashHi
You can use datefromxmlformat( datetime, toformat ) .
in toformat you give: "MM/dd/yyyy" and in datetime you pass your xml format date like: 2007-06-21 T14:31:50.
Try like this. Hope this may help you.
Thanks -
How to convert from value to word ?
Hi all,
I intend to convert from value into words such as 234.50 will be two hundred and thirty four and cents fifty. How should I code or any function will able to produce this ?
Please advise.
Rgds
LimLim
The SP format modifier spells out part of a date - so does YEAR:
SQL> select to_char(sysdate,'YEAR') from dual
2 /
TO_CHAR(SYSDATE,'YEAR')
TWO THOUSAND EIGHT
SQL> To spell out a money amount, you have to take a decimal number and break it into dollars and cents (both integers):
SQL> r
1 declare
2 amount number(10,2) := 12345.67;
3 dollars integer;
4 cents integer;
5 begin
6 dollars := floor(amount);
7 cents := (amount - dollars) * 100;
8 dbms_output.put_line(to_char(to_date(dollars,'J'), 'JSP') || ' dollars a
nd ' ||
9 to_char(to_date(cents,'J'),'JSP') || ' cents');
10* end;
TWELVE THOUSAND THREE HUNDRED FORTY-FIVE dollars and SIXTY-SEVEN cents
PL/SQL procedure successfully completed.
SQL>Note that the spelling out is rather american (in UK we wouldn't add the hyphen and we would say twelve thousand three hundred AND forty five).
Using JSP means we are spelling out a Julian date (ie a number of days, which is allowed to get pretty large. But watch out - there is a limit (somwhere between 1 and 10 million) - ie the number of days between minimum date (4172 BC) and max date (around 31/12/9999).
HTH
Regards Nigel -
Hi All,
I'm still struggling with the same cube and this is my 3rd post and once i fix some thing the other breaks. Please forgive me. When i process my cube i'm getting the error:
Errors in the back-end database access module. OLE DB was unable to convert a value to the data type requested for column 5.
My question is when the error says column 5 (is it the column 5 in the DSV?) or is it the column 5 in the DIMENSION list?
My next question is the DSV Query works perfectly fine , so why this error in cube? This is what i have in the query in DSV.
Please need help. In the below query both the column 5 (ArEASSIGNED TO VENDOR) in the CUBE and underlying table have the same data type and length VARCHAR(4000). Why is the process failing still?
SELECT [High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[compliancejoin]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_0],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[mowingsector]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_1],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseclosedflag]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_2],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casehasvendorinfo]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_3],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[mowingstatus]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_4],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[assignedtovendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_5],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reassignedtovendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_6],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[currentvendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_7],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[invoiced]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSInvoiced0_8],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[invoicedstatus]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_9],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casecloseddateid]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_10],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[assignedtovendordateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_11],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reassigneddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_12],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[currentassigneddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_13],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[mowingduedateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_14],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[vendormoweddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_15],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[captypename] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_16],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casetype] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSCaseType0_17],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casenumbersubgroup] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_18],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casetownship] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_19],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casestatus] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSCaseStatus0_20],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseopendateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_21],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casereferredtolegalflag]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_22],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casemacinitiatedflag] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_23],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseconversionstatusdesc]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_24],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reasonforinvestigation] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_25],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[investigationopendateid]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_26],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[receiveddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_27],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[assigned_department_staff]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_28],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseinitiator] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_29],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[vendorinvoiceamount] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_30],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[inspection_result] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_31],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reason_for_complaint] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_32],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[vendor_action] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_33],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[complaint_source] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_34],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[contractcompliancevendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_35],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[invoicedstatusdateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_36],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[date_of_complaint_id] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_37],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[date_of_inspection_id] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_38],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casenumber] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSCaseNumber0_39],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[parcelnumber] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_40],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[row_index] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSROW_INDEX0_41]
FROM (SELECT CASE Isnumeric(
accela_staging.dbo.fact_highweedsandgrassdetails.vendorinvoiceamount)
WHEN 1 THEN Cast(
fact_highweedsandgrassdetails.vendorinvoiceamount AS
VARCHAR(
10))
END AS
Total_Dollar_Amount,
fact_highweedsandgrassdetails.casenumber,
fact_highweedsandgrassdetails.row_index,
fact_highweedsandgrassdetails.mowingsector,
fact_highweedsandgrassdetails.caseclosedflag,
fact_highweedsandgrassdetails.casecloseddateid,
fact_highweedsandgrassdetails.maccomments,
fact_highweedsandgrassdetails.lastfeeinvoicedateid,
fact_highweedsandgrassdetails.casehasvendorinfo,
fact_highweedsandgrassdetails.mowingstatus,
fact_highweedsandgrassdetails.receiveddateid,
fact_highweedsandgrassdetails.assignedtovendordateid,
fact_highweedsandgrassdetails.assignedtovendor,
fact_highweedsandgrassdetails.reassigneddateid,
fact_highweedsandgrassdetails.reassignedtovendor,
fact_highweedsandgrassdetails.currentvendor,
fact_highweedsandgrassdetails.currentassigneddateid,
fact_highweedsandgrassdetails.mowingduedateid,
fact_highweedsandgrassdetails.vendormoweddateid,
fact_highweedsandgrassdetails.invoiced,
fact_highweedsandgrassdetails.invoicedstatus,
fact_highweedsandgrassdetails.invoicedstatusdateid,
fact_highweedsandgrassdetails.vendorinvoicenumber,
fact_highweedsandgrassdetails.vendorcomments,
fact_casedetails.captypename,
fact_casedetails.casenumbersubgroup,
fact_casedetails.casetype,
fact_casedetails.township AS
CaseTownship,
fact_casedetails.casestatus,
fact_casedetails.caseopendateid,
fact_casedetails.referredtolegalflag AS
CaseReferredToLegalFlag,
fact_casedetails.macinitiatedflag AS
CaseMACInitiatedFlag,
fact_casedetails.conversionstatusdesc AS
CaseConversionStatusDesc,
fact_casedetails.assignedstaff AS
CaseAssignedStaff,
fact_casedetails.completedstaff AS
CaseCompletedStaff,
fact_casedetails.closedbystaff AS
CaseClosedByStaff,
fact_casedetails.initiator AS
CaseInitiator,
fact_casedetails.reasonforinvestigation,
fact_casedetails.primaryaddress,
fact_casedetails.parcelnumber,
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE (fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.recordimportdatetime)) AS
DECIMAL(6, 2))
AS
DaysOpen,
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE
(fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime)) AS
NUMERIC(9, 2))
* 24 AS
HoursOpenToMow,
Cast(Datediff([day],
fact_highweedsandgrassdetails.assignedtovendordate,
COALESCE
(fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime)) AS
NUMERIC(9, 2))
* 24 AS
HoursAssignedToMow,
CASE
WHEN mowingstatus = 'Mowed'
OR mowingstatus = 'Closed' THEN 1
ELSE 0
END AS
NumberComplete,
fact_highweedsandgrassdetails.recordimportdatetime,
fact_casedetails.macsiebelnumber,
fact_highweedsandgrassdetails.mowingduedate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.lastfeeinvoicedate,
fact_highweedsandgrassdetails.investigationopendatetime,
fact_highweedsandgrassdetails.investigationopendate,
fact_highweedsandgrassdetails.investigationopendateid,
Cast(Datediff([day],
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
( vendormoweddatetime IS NOT NULL
AND vendormoweddatetime <=
fact_highweedsandgrassdetails.casecloseddate ) THEN
fact_highweedsandgrassdetails.vendormoweddatetime
ELSE
CASE
WHEN (
fact_highweedsandgrassdetails.casecloseddate IS
NOT NULL
AND fact_highweedsandgrassdetails.casecloseddate
<=
fact_highweedsandgrassdetails.recordimportdatetime )
THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(9, 2)) * 24 AS
AbatementDurationHoursOLD,
Cast(Datediff([day],
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate) IS
NOT NULL THEN COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate)
ELSE
CASE
WHEN ( fact_highweedsandgrassdetails.casecloseddate IS NOT NULL
AND fact_highweedsandgrassdetails.casecloseddate <=
fact_highweedsandgrassdetails.recordimportdatetime ) THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(9, 2)) * 24 AS
AbatementDurationHours,
fact_casedetails.assigneddepartment,
COALESCE (fact_casedetails.assignedstaff, '[null]')
+ '/'
+ COALESCE (fact_casedetails.assigneddepartment, '[null]') AS
Assigned_Department_Staff,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.receiveddatetime,
fact_highweedsandgrassdetails.assignedtovendordate,
fact_highweedsandgrassdetails.vendorinvoiceamount,
fact_highweedsandgrassdetails.invoicedstatusdate,
fact_highweedsandgrassdetails.complaint_source,
fact_highweedsandgrassdetails.inspection_result,
fact_highweedsandgrassdetails.reason_for_complaint,
fact_highweedsandgrassdetails.contractcompliancevendor,
fact_highweedsandgrassdetails.vendor_action,
fact_highweedsandgrassdetails.date_of_complaint_id,
fact_highweedsandgrassdetails.date_of_inspection_id,
CONVERT(INT, Replace(Replace(fact_highweedsandgrassdetails.casenumber,
'HWG', 0)
, '-', 0)) AS compliancejoin,
fact_highweedsandgrassdetails.maccomments AS Expr1,
dbo.dim_highweedscensustracts.b1_census_tract
FROM dbo.fact_highweedsandgrassdetails
INNER JOIN dbo.fact_casedetails
ON fact_highweedsandgrassdetails.casenumber =
fact_casedetails.casenumber
INNER JOIN dbo.dim_highweedscensustracts
ON fact_highweedsandgrassdetails.casenumber =
dbo.dim_highweedscensustracts.casenumber
GROUP BY fact_highweedsandgrassdetails.casenumber,
fact_highweedsandgrassdetails.row_index,
fact_highweedsandgrassdetails.mowingsector,
fact_highweedsandgrassdetails.caseclosedflag,
fact_highweedsandgrassdetails.casecloseddateid,
fact_highweedsandgrassdetails.maccomments,
fact_highweedsandgrassdetails.lastfeeinvoicedateid,
fact_highweedsandgrassdetails.casehasvendorinfo,
fact_highweedsandgrassdetails.mowingstatus,
fact_highweedsandgrassdetails.receiveddateid,
fact_highweedsandgrassdetails.assignedtovendordateid,
fact_highweedsandgrassdetails.assignedtovendor,
fact_highweedsandgrassdetails.reassigneddateid,
fact_highweedsandgrassdetails.reassignedtovendor,
fact_highweedsandgrassdetails.currentvendor,
fact_highweedsandgrassdetails.currentassigneddateid,
fact_highweedsandgrassdetails.mowingduedateid,
fact_highweedsandgrassdetails.vendormoweddateid,
fact_highweedsandgrassdetails.invoiced,
fact_highweedsandgrassdetails.invoicedstatus,
fact_highweedsandgrassdetails.invoicedstatusdateid,
fact_highweedsandgrassdetails.vendorinvoicenumber,
fact_highweedsandgrassdetails.vendorcomments,
fact_casedetails.captypename,
fact_casedetails.casenumbersubgroup,
fact_casedetails.casetype,
fact_casedetails.township,
fact_casedetails.casestatus,
fact_casedetails.caseopendateid,
fact_casedetails.referredtolegalflag,
fact_casedetails.macinitiatedflag,
fact_casedetails.conversionstatusdesc,
fact_casedetails.assignedstaff,
fact_casedetails.completedstaff,
fact_casedetails.closedbystaff,
fact_casedetails.initiator,
fact_casedetails.reasonforinvestigation,
fact_casedetails.primaryaddress,
fact_casedetails.parcelnumber,
fact_highweedsandgrassdetails.vendormoweddatetime,
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE (
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.recordimportdatetime))
AS
NUMERIC(9, 2)),
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE (
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime))
AS
NUMERIC(9, 2)),
Cast(Datediff([day],
fact_highweedsandgrassdetails.assignedtovendordate,
COALESCE (
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime))
AS
NUMERIC(9, 2)),
CASE
WHEN mowingstatus = 'Mowed'
OR mowingstatus = 'Closed' THEN 1
ELSE 0
END,
fact_highweedsandgrassdetails.recordimportdatetime,
fact_casedetails.macsiebelnumber,
fact_highweedsandgrassdetails.mowingduedate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.lastfeeinvoicedate,
fact_highweedsandgrassdetails.investigationopendatetime,
fact_highweedsandgrassdetails.investigationopendate,
fact_highweedsandgrassdetails.investigationopendateid,
Cast(Datediff([day],
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
( vendormoweddatetime IS NOT NULL
AND vendormoweddatetime <=
fact_highweedsandgrassdetails.casecloseddate ) THEN
fact_highweedsandgrassdetails.vendormoweddatetime
ELSE
CASE
WHEN (
fact_highweedsandgrassdetails.casecloseddate
IS NOT NULL
AND
fact_highweedsandgrassdetails.casecloseddate <=
fact_highweedsandgrassdetails.recordimportdatetime )
THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE
fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(9, 2)),
Cast(Datediff(ss,
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate) IS
NOT NULL THEN COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate)
ELSE
CASE
WHEN
( fact_highweedsandgrassdetails.casecloseddate IS NOT NULL
AND fact_highweedsandgrassdetails.casecloseddate <=
fact_highweedsandgrassdetails.recordimportdatetime ) THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(18, 2)) * 60,
fact_casedetails.assigneddepartment,
COALESCE (fact_casedetails.assignedstaff, '[null]')
+ '/'
+ COALESCE (fact_casedetails.assigneddepartment, '[null]'),
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.receiveddatetime,
fact_highweedsandgrassdetails.assignedtovendordate,
fact_highweedsandgrassdetails.vendorinvoiceamount,
fact_highweedsandgrassdetails.invoicedstatusdate,
fact_highweedsandgrassdetails.complaint_source,
fact_highweedsandgrassdetails.inspection_result,
fact_highweedsandgrassdetails.reason_for_complaint,
fact_highweedsandgrassdetails.contractcompliancevendor,
fact_highweedsandgrassdetails.vendor_action,
fact_highweedsandgrassdetails.date_of_complaint_id,
fact_highweedsandgrassdetails.date_of_inspection_id,
CONVERT(INT, Replace(
Replace(fact_highweedsandgrassdetails.casenumber, 'HWG', 0)
, '-', 0)),
fact_highweedsandgrassdetails.maccomments,
dbo.dim_highweedscensustracts.b1_census_tract) AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS]
ORDER BY [High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[compliancejoin]
ASC
SVI just counted the columns from the top:
1) compliancejoin, 2) mowingsector, 3) caseclosedflag, 4) casehasvendorinfo, 5) mowingstatus, 6) assignedtovendor.
I see now that your subject line talks about column 6, but you say column 5 in body of your original post.
I don't know anything about cubes, but apparently there is some mapping problem when you run it from SSAS. (I assume it is SSAS, a part of the product I'm entirely ignorant of.) I figured that if you had got tripped by the zero-based numbering, you
might be staring on the wrong column.
Erland Sommarskog, SQL Server MVP, [email protected] -
Hi All,
I'm still struggling with the same cube and this is my 3rd post and once i fix some thing the other breaks. Please forgive me. When i process my cube i'm getting the error:
Errors in the back-end database access module. OLE DB was unable to convert a value to the data type requested for column 5.
My question is when the error says column 5 (is it the column 5 in the DSV?) or is it the column 5 in the DIMENSION list?
My next question is the DSV Query works perfectly fine , so why this error in cube? This is what i have in the query in DSV.
Please need help. In the below query both the column 5 (ArEASSIGNED TO VENDOR) in the CUBE and underlying table have the same data type and length VARCHAR(4000). Why is the process failing still?
SELECT [High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[compliancejoin]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_0],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[mowingsector]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_1],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseclosedflag]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_2],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casehasvendorinfo]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_3],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[mowingstatus]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_4],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[assignedtovendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_5],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reassignedtovendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_6],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[currentvendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_7],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[invoiced]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSInvoiced0_8],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[invoicedstatus]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_9],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casecloseddateid]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_10],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[assignedtovendordateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_11],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reassigneddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_12],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[currentassigneddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_13],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[mowingduedateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_14],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[vendormoweddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_15],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[captypename] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_16],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casetype] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSCaseType0_17],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casenumbersubgroup] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_18],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casetownship] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_19],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casestatus] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSCaseStatus0_20],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseopendateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_21],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casereferredtolegalflag]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_22],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casemacinitiatedflag] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_23],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseconversionstatusdesc]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_24],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reasonforinvestigation] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_25],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[investigationopendateid]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_26],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[receiveddateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_27],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[assigned_department_staff]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_28],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[caseinitiator] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_29],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[vendorinvoiceamount] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_30],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[inspection_result] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_31],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[reason_for_complaint] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_32],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[vendor_action] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_33],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[complaint_source] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_34],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[contractcompliancevendor]
AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_35],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[invoicedstatusdateid] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_36],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[date_of_complaint_id] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_37],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[date_of_inspection_id] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_38],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[casenumber] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSCaseNumber0_39],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[parcelnumber] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS0_40],
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[row_index] AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTSROW_INDEX0_41]
FROM (SELECT CASE Isnumeric(
accela_staging.dbo.fact_highweedsandgrassdetails.vendorinvoiceamount)
WHEN 1 THEN Cast(
fact_highweedsandgrassdetails.vendorinvoiceamount AS
VARCHAR(
10))
END AS
Total_Dollar_Amount,
fact_highweedsandgrassdetails.casenumber,
fact_highweedsandgrassdetails.row_index,
fact_highweedsandgrassdetails.mowingsector,
fact_highweedsandgrassdetails.caseclosedflag,
fact_highweedsandgrassdetails.casecloseddateid,
fact_highweedsandgrassdetails.maccomments,
fact_highweedsandgrassdetails.lastfeeinvoicedateid,
fact_highweedsandgrassdetails.casehasvendorinfo,
fact_highweedsandgrassdetails.mowingstatus,
fact_highweedsandgrassdetails.receiveddateid,
fact_highweedsandgrassdetails.assignedtovendordateid,
fact_highweedsandgrassdetails.assignedtovendor,
fact_highweedsandgrassdetails.reassigneddateid,
fact_highweedsandgrassdetails.reassignedtovendor,
fact_highweedsandgrassdetails.currentvendor,
fact_highweedsandgrassdetails.currentassigneddateid,
fact_highweedsandgrassdetails.mowingduedateid,
fact_highweedsandgrassdetails.vendormoweddateid,
fact_highweedsandgrassdetails.invoiced,
fact_highweedsandgrassdetails.invoicedstatus,
fact_highweedsandgrassdetails.invoicedstatusdateid,
fact_highweedsandgrassdetails.vendorinvoicenumber,
fact_highweedsandgrassdetails.vendorcomments,
fact_casedetails.captypename,
fact_casedetails.casenumbersubgroup,
fact_casedetails.casetype,
fact_casedetails.township AS
CaseTownship,
fact_casedetails.casestatus,
fact_casedetails.caseopendateid,
fact_casedetails.referredtolegalflag AS
CaseReferredToLegalFlag,
fact_casedetails.macinitiatedflag AS
CaseMACInitiatedFlag,
fact_casedetails.conversionstatusdesc AS
CaseConversionStatusDesc,
fact_casedetails.assignedstaff AS
CaseAssignedStaff,
fact_casedetails.completedstaff AS
CaseCompletedStaff,
fact_casedetails.closedbystaff AS
CaseClosedByStaff,
fact_casedetails.initiator AS
CaseInitiator,
fact_casedetails.reasonforinvestigation,
fact_casedetails.primaryaddress,
fact_casedetails.parcelnumber,
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE (fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.recordimportdatetime)) AS
DECIMAL(6, 2))
AS
DaysOpen,
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE
(fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime)) AS
NUMERIC(9, 2))
* 24 AS
HoursOpenToMow,
Cast(Datediff([day],
fact_highweedsandgrassdetails.assignedtovendordate,
COALESCE
(fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime)) AS
NUMERIC(9, 2))
* 24 AS
HoursAssignedToMow,
CASE
WHEN mowingstatus = 'Mowed'
OR mowingstatus = 'Closed' THEN 1
ELSE 0
END AS
NumberComplete,
fact_highweedsandgrassdetails.recordimportdatetime,
fact_casedetails.macsiebelnumber,
fact_highweedsandgrassdetails.mowingduedate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.lastfeeinvoicedate,
fact_highweedsandgrassdetails.investigationopendatetime,
fact_highweedsandgrassdetails.investigationopendate,
fact_highweedsandgrassdetails.investigationopendateid,
Cast(Datediff([day],
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
( vendormoweddatetime IS NOT NULL
AND vendormoweddatetime <=
fact_highweedsandgrassdetails.casecloseddate ) THEN
fact_highweedsandgrassdetails.vendormoweddatetime
ELSE
CASE
WHEN (
fact_highweedsandgrassdetails.casecloseddate IS
NOT NULL
AND fact_highweedsandgrassdetails.casecloseddate
<=
fact_highweedsandgrassdetails.recordimportdatetime )
THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(9, 2)) * 24 AS
AbatementDurationHoursOLD,
Cast(Datediff([day],
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate) IS
NOT NULL THEN COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate)
ELSE
CASE
WHEN ( fact_highweedsandgrassdetails.casecloseddate IS NOT NULL
AND fact_highweedsandgrassdetails.casecloseddate <=
fact_highweedsandgrassdetails.recordimportdatetime ) THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(9, 2)) * 24 AS
AbatementDurationHours,
fact_casedetails.assigneddepartment,
COALESCE (fact_casedetails.assignedstaff, '[null]')
+ '/'
+ COALESCE (fact_casedetails.assigneddepartment, '[null]') AS
Assigned_Department_Staff,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.receiveddatetime,
fact_highweedsandgrassdetails.assignedtovendordate,
fact_highweedsandgrassdetails.vendorinvoiceamount,
fact_highweedsandgrassdetails.invoicedstatusdate,
fact_highweedsandgrassdetails.complaint_source,
fact_highweedsandgrassdetails.inspection_result,
fact_highweedsandgrassdetails.reason_for_complaint,
fact_highweedsandgrassdetails.contractcompliancevendor,
fact_highweedsandgrassdetails.vendor_action,
fact_highweedsandgrassdetails.date_of_complaint_id,
fact_highweedsandgrassdetails.date_of_inspection_id,
CONVERT(INT, Replace(Replace(fact_highweedsandgrassdetails.casenumber,
'HWG', 0)
, '-', 0)) AS compliancejoin,
fact_highweedsandgrassdetails.maccomments AS Expr1,
dbo.dim_highweedscensustracts.b1_census_tract
FROM dbo.fact_highweedsandgrassdetails
INNER JOIN dbo.fact_casedetails
ON fact_highweedsandgrassdetails.casenumber =
fact_casedetails.casenumber
INNER JOIN dbo.dim_highweedscensustracts
ON fact_highweedsandgrassdetails.casenumber =
dbo.dim_highweedscensustracts.casenumber
GROUP BY fact_highweedsandgrassdetails.casenumber,
fact_highweedsandgrassdetails.row_index,
fact_highweedsandgrassdetails.mowingsector,
fact_highweedsandgrassdetails.caseclosedflag,
fact_highweedsandgrassdetails.casecloseddateid,
fact_highweedsandgrassdetails.maccomments,
fact_highweedsandgrassdetails.lastfeeinvoicedateid,
fact_highweedsandgrassdetails.casehasvendorinfo,
fact_highweedsandgrassdetails.mowingstatus,
fact_highweedsandgrassdetails.receiveddateid,
fact_highweedsandgrassdetails.assignedtovendordateid,
fact_highweedsandgrassdetails.assignedtovendor,
fact_highweedsandgrassdetails.reassigneddateid,
fact_highweedsandgrassdetails.reassignedtovendor,
fact_highweedsandgrassdetails.currentvendor,
fact_highweedsandgrassdetails.currentassigneddateid,
fact_highweedsandgrassdetails.mowingduedateid,
fact_highweedsandgrassdetails.vendormoweddateid,
fact_highweedsandgrassdetails.invoiced,
fact_highweedsandgrassdetails.invoicedstatus,
fact_highweedsandgrassdetails.invoicedstatusdateid,
fact_highweedsandgrassdetails.vendorinvoicenumber,
fact_highweedsandgrassdetails.vendorcomments,
fact_casedetails.captypename,
fact_casedetails.casenumbersubgroup,
fact_casedetails.casetype,
fact_casedetails.township,
fact_casedetails.casestatus,
fact_casedetails.caseopendateid,
fact_casedetails.referredtolegalflag,
fact_casedetails.macinitiatedflag,
fact_casedetails.conversionstatusdesc,
fact_casedetails.assignedstaff,
fact_casedetails.completedstaff,
fact_casedetails.closedbystaff,
fact_casedetails.initiator,
fact_casedetails.reasonforinvestigation,
fact_casedetails.primaryaddress,
fact_casedetails.parcelnumber,
fact_highweedsandgrassdetails.vendormoweddatetime,
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE (
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.recordimportdatetime))
AS
NUMERIC(9, 2)),
Cast(Datediff([day],
fact_highweedsandgrassdetails.receiveddatetime,
COALESCE (
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime))
AS
NUMERIC(9, 2)),
Cast(Datediff([day],
fact_highweedsandgrassdetails.assignedtovendordate,
COALESCE (
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.recordimportdatetime))
AS
NUMERIC(9, 2)),
CASE
WHEN mowingstatus = 'Mowed'
OR mowingstatus = 'Closed' THEN 1
ELSE 0
END,
fact_highweedsandgrassdetails.recordimportdatetime,
fact_casedetails.macsiebelnumber,
fact_highweedsandgrassdetails.mowingduedate,
fact_highweedsandgrassdetails.vendormoweddate,
fact_highweedsandgrassdetails.lastfeeinvoicedate,
fact_highweedsandgrassdetails.investigationopendatetime,
fact_highweedsandgrassdetails.investigationopendate,
fact_highweedsandgrassdetails.investigationopendateid,
Cast(Datediff([day],
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
( vendormoweddatetime IS NOT NULL
AND vendormoweddatetime <=
fact_highweedsandgrassdetails.casecloseddate ) THEN
fact_highweedsandgrassdetails.vendormoweddatetime
ELSE
CASE
WHEN (
fact_highweedsandgrassdetails.casecloseddate
IS NOT NULL
AND
fact_highweedsandgrassdetails.casecloseddate <=
fact_highweedsandgrassdetails.recordimportdatetime )
THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE
fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(9, 2)),
Cast(Datediff(ss,
fact_highweedsandgrassdetails.investigationopendatetime,
CASE
WHEN
COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate) IS
NOT NULL THEN COALESCE (vendormoweddatetime,
fact_highweedsandgrassdetails.casecloseddate)
ELSE
CASE
WHEN
( fact_highweedsandgrassdetails.casecloseddate IS NOT NULL
AND fact_highweedsandgrassdetails.casecloseddate <=
fact_highweedsandgrassdetails.recordimportdatetime ) THEN
fact_highweedsandgrassdetails.casecloseddate
ELSE fact_highweedsandgrassdetails.recordimportdatetime
END
END) AS NUMERIC(18, 2)) * 60,
fact_casedetails.assigneddepartment,
COALESCE (fact_casedetails.assignedstaff, '[null]')
+ '/'
+ COALESCE (fact_casedetails.assigneddepartment, '[null]'),
fact_highweedsandgrassdetails.casecloseddate,
fact_highweedsandgrassdetails.receiveddatetime,
fact_highweedsandgrassdetails.assignedtovendordate,
fact_highweedsandgrassdetails.vendorinvoiceamount,
fact_highweedsandgrassdetails.invoicedstatusdate,
fact_highweedsandgrassdetails.complaint_source,
fact_highweedsandgrassdetails.inspection_result,
fact_highweedsandgrassdetails.reason_for_complaint,
fact_highweedsandgrassdetails.contractcompliancevendor,
fact_highweedsandgrassdetails.vendor_action,
fact_highweedsandgrassdetails.date_of_complaint_id,
fact_highweedsandgrassdetails.date_of_inspection_id,
CONVERT(INT, Replace(
Replace(fact_highweedsandgrassdetails.casenumber, 'HWG', 0)
, '-', 0)),
fact_highweedsandgrassdetails.maccomments,
dbo.dim_highweedscensustracts.b1_census_tract) AS
[High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS]
ORDER BY [High_x0020_Weeds_x0020_and_x0020_Grass_x0020_FACTS].[compliancejoin]
ASC
SVI just counted the columns from the top:
1) compliancejoin, 2) mowingsector, 3) caseclosedflag, 4) casehasvendorinfo, 5) mowingstatus, 6) assignedtovendor.
I see now that your subject line talks about column 6, but you say column 5 in body of your original post.
I don't know anything about cubes, but apparently there is some mapping problem when you run it from SSAS. (I assume it is SSAS, a part of the product I'm entirely ignorant of.) I figured that if you had got tripped by the zero-based numbering, you
might be staring on the wrong column.
Erland Sommarskog, SQL Server MVP, [email protected] -
OLAP Expression Analytical Functions and NA Values
Hello,
I am trying to use the SUM and MAX functions over a hierarchy where there are potentially NA values. I believe in OLAP DML, the natural behavior is to skip these values. Can a skip be accomplished with either the SUM or MAX OLAP Expression Syntax functions?
Cheers!Pre-requisites:
===============
Time dimension with level=DAY.... i have restricted data to 1 month approx.. 20100101 to 20100201 (32 days).
Measure of interest - a (say)
Time Dimension attribute which indicates WEEKDAY.... if you have END_DATE attribute with date datatype so we can extract the DAY (MON/TUE/WED/...) from it and decipher wkday/wkend status for DAY.
Sort time as per END_DATE ..
Take care of other dimensions during testing... restrict all other dimensions of cube to single value. Final formula would be independent of other dimensions but this helps development/testing.
Step 1:
======
"Firm up the required design in olap dml
"rpr down time
" w 10 heading 't long' time_long_description
" w 10 heading 't end date' time_end_date
" w 20 heading 'Day Type' convert(time_end_date text 'DY')
" a
NOTE: version 1 of moving total
" heading 'moving minus 2 all' movingtotal(a, -2, 0, 1, time status)
" w 20 heading 'Day Type' convert(time_end_date text 'DY')
" heading 'a wkday' if convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' then a else na
NOTE: version 2 of moving total
" heading 'moving minus 2 wkday' movingtotal(a, -2, 0, 1, time convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN')
" w 20 heading 'Day Type' convert(time_end_date text 'DY')
" heading 'a wkday non-na' if convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' and a ne na then a else na
NOTE: version 3 of moving total
" heading 'moving minus 2 wkday non-na' movingtotal(a, -2, 0, 1, time convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' and a ne na)
OLAP DML Command:
rpr down time w 10 heading 't long' time_long_description w 10 heading 't end date' time_end_date w 20 heading 'Day Type' convert(time_end_date text 'DY') a heading 'moving minus 2 all' movingtotal(a, -2, 0, 1, time status) w 20 heading 'Day Type' convert(time_end_date text 'DY') heading 'a wkday' if convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' then a else na heading 'moving minus 2 wkday' movingtotal(a, -2, 0, 1, time convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN') w 20 heading 'Day Type' convert(time_end_date text 'DY') heading 'a wkday non-na' if convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' and a ne na then a else na heading 'moving minus 2 wkday non-na' movingtotal(a, -2, 0, 1, time convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' and a ne na)
Step 2:
======
"Define additional measure to contain the required/desired formula implementing the business requirements (version 3 above)
" create formula AF1 which points to last column... i.e. OLAP_DML_EXPRESSION
dfn af1 formula movingtotal(a, -2, 0, 1, time convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' and a ne na)
"NOTE: Do this via AWM using calculated member with template type = OLAP_DML_EXPRESSION so that the cube view for cube contains a column for measure AF1
OLAP DML Command:
rpr down time w 10 heading 't long' time_long_description w 10 heading 't end date' time_end_date w 20 heading 'Day Type' convert(time_end_date text 'DY') a heading 'a wkday non-na' if convert(time_end_date text 'DY') ne 'SAT' and convert(time_end_date text 'DY') ne 'SUN' and a ne na then a else na heading 'moving minus 2 wkday non-na (AF1)' af1
->
Step 3:
=======
Extend Oracle OLAP with regular SQL functionality like SQL ANALYTICAL functions to fill up the gaps for intermediate week days like DAY_20100104 (TUE), DAY_20100105 (WED) etc.
Use: SQL Analytical Function LAST_VALUE() in query.. i.e. in report or query.. dont use AF1 but use LAST_VALUE(af1).... as below pseudo-code:
LAST_VALUE(cube_view.af1) over (partition by <product, organization, ... non-time dimensions> order by <DAY_KEY_Col> range unbounded preceeding and current row)
HTH
Shankar -
Date difference based on the conditions is giving wrong values
Hi,
In creating the formula for conditional date difference calculation,
i.e.,
if (sto date is 0) then (act date - mat rel date) else (sto date is not equal to 0) then (sto date - mat rel date)
So I tried with,
(sto date == 0) * (act date - mat rel date) + (sto date <> 0) * (sto date - mat rel date)
But I am getting a wrong value even with decimals as days can't be in decimals. Please suggest where I am going wrong in calculation.
Thanks,
Best Regards,
Darshan MSHi Darshan,
First of all, were the dates converted already to keyfigure?
If not, please check:
Convert a Characteristic into a Key Figure (BEx)
If they were already converted, try this:
(sto date == 0) * (act date - mat rel date) + (sto date - mat rel date)
Regards,
Loed -
HTMLDB_APPLICATION.G_F01 has wrong value!
HTMLDB_APPLICATION.G_F01 has wrong value!
Hello again,
I have a search page in my app (here the user defines the search criteria) P1.
The page branches to P130, where the result is shown. This second page contains a region of type 'SQL Query (PL/SQL Function Body Returning SQL Query)'. The code for this dynamic query is 231 lines of code, so I want to spare you scrolling through it here . What it basically does is generating SQL QRY's such as the following:
select distinct(sq.SAMPLE_ID) XXX,
'ID: '||sq.SAMPLE_ID||'
' ||'Type: '||sq.SAMPLE_TYPE||'
' ||'Collection Date: '||sq.COLLECTION_DATE SAMPLE_INFO,
'Aliquots (T/A): '||to_char(sq.ALIQUOTS_TOTAL)|| '/' ||to_char(sq.ALIQUOTS_AVAILABLE)||'
' ||'Volume (T/A): '||to_char(sq.VOLUME_TOTAL,'990D00')|| '/' ||to_char(sq.VOLUME_AVAILABLE,'990D00') AVAILABILITY,
'Age: '||sq.PATIENT_AGE||'
' ||'Gender: '||sq.PATIENT_SEX||'
' ||'Bloodtype: '||sq.BLOOD_TYPE||'
' PATIENT_INFO,
DML_SERVICE.get_Diagnoses(sq.SAMPLE_ID) DIAGNOSES,
DML_SERVICE.get_Medications(sq.SAMPLE_ID) MEDICATIONS,
DML_SERVICE.get_Interferences(sq.SAMPLE_ID) INTERFERENCES,
DML_SERVICE.get_LabData(sq.SAMPLE_ID) LABDATA,
decode(to_char(sq.ALIQUOTS_AVAILABLE), '0', null, htmldb_item.text(1, '1', 1, 2)) ORDER_QTY,
decode(to_char(sq.ALIQUOTS_AVAILABLE), '0', null, htmldb_item.checkbox(2,sq.SAMPLE_ID)) ORDER_ME
from SEARCH_V01 sq
where sq.DIAGNOSIS = 'D-Dimer'
order by 1 desc
The DML_SERVICE functions just return a string(Varchar2). At the right side of the report I have two columns, one with a textfield (ORDER_QTY, default: 1) and one with a checkbox (ORDER_ME) for each line.
For each line where the checkbox is checked, a process (On Submit - after Comp and Val) places the order for the requested quantity (this is done by inserting an Order ID into the ALIQUOTS table -> see bold update statement below).
The process follows:
declare
alq_qty number;
alq_id number;
cnt number;
begin
cnt := 0;
for i in 1..HTMLDB_APPLICATION.G_F02.count
loop
select count(*) -- set alq_qty to number of available alq's
into alq_qty
from ALIQUOTS a
where a.SAMPLE_ID = HTMLDB_APPLICATION.G_F02(i)
and a.ORDER_ID = 0;
insert into D_DEBUG (ID, DD) values (1, 'wanted: ' || HTMLDB_APPLICATION.G_F01(i) || ' available: ' || alq_qty); -- REMOVE!!!
if alq_qty > to_number(HTMLDB_APPLICATION.G_F01(i)) then -- if there are enough alq's
alq_qty := to_number(HTMLDB_APPLICATION.G_F01(i)); -- set alq_qty to number of ordered alq's
end if;
for n in 1..alq_qty
loop
select min(ID)
into alq_id
from ALIQUOTS
where sample_id = HTMLDB_APPLICATION.G_F02(i)
and order_id = 0;
insert into D_DEBUG (ID, DD) values (1, 'alq_id: '||alq_id); -- REMOVE!!!
update ALIQUOTS
set order_id = :P130_SELECT_ORDER
where id = alq_id;
cnt := cnt + 1;
end loop;
dml_service.upd_sample_record(HTMLDB_APPLICATION.G_F02(i)); -- refresh data in SAMPLE table
end loop;
:P130_MSG := 'Assigned '||cnt||' aliquots to order: '||:P130_SELECT_ORDER;
end;
Now my problem is that this process does what it should, sometimes. When I enter 6 in one row and check the checkbox and enter 4 in another row and check that checkbox and then press SUBMIT, 10 aliquots are assigned to my order.
Sometimes.... the other times the process just orders 2 aliquots, one of each line and disregards the number entered in the textfield.
Or so it may seem: I added some lines to write debug info into D_DEBUG (see above.) From those entries you can assume that the content of HTMLDB_APPLICATION.G_F01(i) is in fact '1' when the process does its work. So I think the problem lies somewhere in the creation of htmldb_item.text(), (I went through the API of that htmldb_item again and again...)
Also: I can reproduce / recreate this error. It's totally weird: for some rows it (always) works and for some it (always) doesn't !!!
So, any help, any suggestion is really appreciated (I'm currently working on bringing the crucial part of this to marvel.oracle.com)
-David-
[Edited by: sleuniss on Jul 15, 2004 12:18 PM]
Changed subject line.Now the subjectline is right, but the indentation is gone.... :-(
again the SQL query:
select distinct(sq.SAMPLE_ID) XXX,
'ID: '||sq.SAMPLE_ID||'
' ||'Type: '||sq.SAMPLE_TYPE||'
' ||'Collection Date: '||sq.COLLECTION_DATE SAMPLE_INFO,
'Aliquots (T/A): '||to_char(sq.ALIQUOTS_TOTAL)|| '/' ||to_char(sq.ALIQUOTS_AVAILABLE)||'
' ||'Volume (T/A): '||to_char(sq.VOLUME_TOTAL,'990D00')|| '/' ||to_char(sq.VOLUME_AVAILABLE,'990D00') AVAILABILITY,
'Age: '||sq.PATIENT_AGE||'
' ||'Gender: '||sq.PATIENT_SEX||'
' ||'Bloodtype: '||sq.BLOOD_TYPE||'
' PATIENT_INFO,
DML_SERVICE.get_Diagnoses(sq.SAMPLE_ID) DIAGNOSES,
DML_SERVICE.get_Medications(sq.SAMPLE_ID) MEDICATIONS,
DML_SERVICE.get_Interferences(sq.SAMPLE_ID) INTERFERENCES,
DML_SERVICE.get_LabData(sq.SAMPLE_ID) LABDATA,
decode(to_char(sq.ALIQUOTS_AVAILABLE), '0', null, htmldb_item.text(1, '1', 1, 2)) ORDER_QTY,
decode(to_char(sq.ALIQUOTS_AVAILABLE), '0', null, htmldb_item.checkbox(2,sq.SAMPLE_ID)) ORDER_ME
from SEARCH_V01 sq
where sq.DIAGNOSIS = 'D-Dimer'
order by 1 desc
and the process:
declare
alq_qty number;
alq_id number;
cnt number;
begin
cnt := 0;
for i in 1..HTMLDB_APPLICATION.G_F02.count
loop
select count(*) -- set alq_qty to number of available alq's
into alq_qty
from ALIQUOTS a
where a.SAMPLE_ID = HTMLDB_APPLICATION.G_F02(i)
and a.ORDER_ID = 0;
insert into D_DEBUG (ID, DD) values (1, 'wanted: ' || HTMLDB_APPLICATION.G_F01(i) || ' available: ' || alq_qty); -- REMOVE!!!
if alq_qty > to_number(HTMLDB_APPLICATION.G_F01(i)) then -- if there are enough alq's
alq_qty := to_number(HTMLDB_APPLICATION.G_F01(i)); -- set alq_qty to number of ordered alq's
end if;
for n in 1..alq_qty
loop
select min(ID)
into alq_id
from ALIQUOTS
where sample_id = HTMLDB_APPLICATION.G_F02(i)
and order_id = 0;
insert into D_DEBUG (ID, DD) values (1, 'alq_id: '||alq_id); -- REMOVE!!!
update ALIQUOTS
set order_id = :P130_SELECT_ORDER
where id = alq_id;
cnt := cnt + 1;
end loop;
dml_service.upd_sample_record(HTMLDB_APPLICATION.G_F02(i)); -- refresh data in SAMPLE table
end loop;
:P130_MSG := 'Assigned '||cnt||' aliquots to order: '||:P130_SELECT_ORDER;
end;
-David- -
Convert data values in columns to another value based on a math formula
ISSUE:
I have a database of emergency incidents with descriptive data and longitude and
latitude. I would like to make a google map out of the information but unfortunately
the X Y coordinates are projected in Florida State Plane West in feet. Google maps
requires WGS84 longitude and latitude in decimal degrees.
PROBLEM:
I have written some code in Transact SQL that will convert the values. But I am at a loss as to how to do the following:
1.) plug in the X Y values from my database using an sql SELECT statement.
2.) apply the formula to convert from State Plane to WGS84 to these X Y values
3.) output the results.
In other words, I have the data and I have the formula, but I am not figuring out how to plug the data into the formula and output the results. I am missing how to tie it all together.
CODE:
DECLARE @Easting DECIMAL(18,10);
--SET @Easting = CAST(I_MapX AS DECIMAL(18,10));
DECLARE @Northing DECIMAL(18,10);
--SET @Northing = CAST(I_MapY AS DECIMAL(18,10));
DECLARE @m2sft DECIMAL(10,10);
SET @m2sft = 1200.0/3937.0;
DECLARE @N0 DECIMAL(3,2);
SET @N0 = 0.0;
DECLARE @E0 DECIMAL(18,11);
SET @E0 = 656166.6666666665;
DECLARE @S0 DECIMAL(12,5);
SET @S0 = 2692050.5001/@m2sft;
DECLARE @K0 DECIMAL(18,18);
SET @K0 = 0.9999411764705882;
DECLARE @a DECIMAL(10,2);
SET @a = 6378137.0/@m2sft;
DECLARE @e DECIMAL(18,17);
SET @e = 0.0818191911198883;
DECLARE @ePrime DECIMAL(18,17);
SET @ePrime = 0.08208852110265381;
DECLARE @r DECIMAL(18,10);
SET @r = 6367449.14577/@m2sft;
DECLARE @V0 DECIMAL(15,12);
SET @V0 = 0.005022893948;
DECLARE @V2 DECIMAL(15,12);
SET @V2 = 0.000029370625;
DECLARE @V4 DECIMAL(15,12);
SET @V4 = 0.000000235059;
DECLARE @V6 DECIMAL(15,12);
SET @V6 = 0.000000002181;
DECLARE @L0 DECIMAL(4,2);
SET @L0 = 82.0;
DECLARE @w DECIMAL(18,10);
SET @w = (@Northing - @N0 + @S0)/(@k0*@r);
DECLARE @of DECIMAL(18,10);
SET @of = @w + (sin(@w)*cos(@w))*(@V0 + @V2*power(cos(@w),2) + @V4*power(cos(@w),4) + @V6*power(cos(@w),6));
DECLARE @Rf DECIMAL(18,10);
SET @Rf = @k0*@a/sqrt((1 - power(@e,2)*power(sin(@of),2)));
DECLARE @EPrime2 DECIMAL(18,10);
SET @EPrime2 = @Easting - @E0;
DECLARE @Q DECIMAL(18,10);
SET @Q = @EPrime2/@Rf;
DECLARE @tf DECIMAL(18,10);
SET @tf = tan(@of);
DECLARE @nf DECIMAL(18,10);
SET @nf = @ePrime*cos(@of);
DECLARE @B2 DECIMAL(18,10);
SET @B2 = -0.5 * @tf * (1 + POWER(@nf,2));
DECLARE @B4 DECIMAL(18,10);
SET @B4 = -1/12*(5 + 3 * POWER(@tf,2) +POWER(@nf,2) * (1-9 * POWER(@tf,2)) - 4 * POWER(@nf,4));
DECLARE @B6 DECIMAL(18,10);
SET @B6 = 1/360*(61 + 90*POWER(@tf,2) + 45*POWER(@tf,4) + POWER(@nf,2)*(46 - 252*POWER(@tf,2) - 90*POWER(@tf,4)));
DECLARE @Latitude DECIMAL(18,10);
SET @Latitude = (@of + @B2*POWER(@Q,2)*(1 + POWER(@Q,2)*(@B4 + @B6*POWER(@Q,2))))*180/(PI());
DECLARE @B3 DECIMAL(18,10);
SET @B3 = -1/6*(1 + 2*POWER(@tf,2) + POWER(@nf,2));
DECLARE @B5 DECIMAL(18,10);
SET @B5 = 1/120*(5 + 28*POWER(@tf,2) + 24*POWER(@tf,4) + POWER(@nf,2)*(6 + 8*POWER(@tf,2)));
DECLARE @B7 DECIMAL(18,10);
SET @B7 = -1/5040*(61 + 662*POWER(@tf,2) + 1320*POWER(@tf,4) + 720*POWER(@tf,6));
DECLARE @L DECIMAL(18,10);
SET @L = @Q*(1 + POWER(@Q,2)*(@B3 + POWER(@Q,2)*(@B5 + @B7*POWER(@Q,2))));
DECLARE @Longitude DECIMAL(18,10);
SET @Longitude = (@L0 - (@L/cos(@of))*180/(PI()))*-1;
SELECT
I_EventNumber
FROM Incident
WHERE I_tTimeDispatch > 'May 7, 2012'
SAMPLE DATA:
Here is some raw data in order to get you started. Please notice the MapX and MapY
coordinates are VARCHAR because they are Florida State Plane projections. The goal is
to take these and turn them into WGS84 longitude and latitude expressed as decimal
degrees to be used in Google maps. NOTE: I can convert from VARCHAR to DECIMAL. I just can't figure out where to plug my database columns into the sql query to output a result.
CREATE TABLE Incidents
I_EventNumber VARCHAR(20)
I_MapY VARCHAR(15)
I_MapX VARCHAR(15)
INSERT INTO Incident
VALUES
(FCW69, 0815312, 0672298)
, (FCW70, 0833311, 0697870)
, (FCW71, 0807747, 0699684)
, (FCW72, 0801252, 0689469)
, (FCW73, 0853491, 0692350)Here's a way to get the results, all as part of a single extensive query (this would probably be more suited for defining a VIEW, where you could join on the input table with the VIEW to incorporate the computed values.
If you instead had a business situation where you might need to execute this logic from many different places, rewriting as a user defined function might be better. Anyway, for the answer plus a demonstration of the power of CROSS APPLY to generate
interim working values...
Create_Sample_Data:
Declare @Incident TABLE
I_EventNumber VARCHAR(20), I_MapY VARCHAR(15), I_MapX VARCHAR(15)
INSERT INTO @Incident
VALUES
('FCW69', '0815312', '0672298')
, ('FCW70', '0833311', '0697870')
, ('FCW71', '0807747', '0699684')
, ('FCW72', '0801252', '0689469')
, ('FCW73', '0853491', '0692350') /* This insert is SQL 2008 syntax only.. do multiple inserts or a UNION for 2005 */
AsQuery:
Select *
from @INCIDENT
Cross Apply
Select
N0 = 0.0,
E0 = 656166.6666666665,
K0 = 0.9999411764705882,
e = 0.0818191911198883,
ePrime = 0.08208852110265381,
V0 = 0.005022893948,
V2 = 0.000029370625,
V4 = 0.000000235059,
V6 = 0.000000002181,
L0 = 82.0,
Easting = CAST(I_MapX AS DECIMAL(18,10)),
Northing = CAST(I_MapY AS DECIMAL(18,10))
) as CAStatic
Cross Apply
Select m2sft = 1200.0/3937.0,
EPrime2 = Easting - E0
) as CAComputed1
Cross Apply
Select S0 = 2692050.5001/m2sft,
r = 6367449.14577/m2sft,
a = 6378137.0/m2sft
) as CAComputed2
Cross Apply
Select
w = (Northing - N0 + S0)/(k0*r)
) as CAComputed4
Cross Apply
Select
[of] = w + (sin(w)*cos(w))*(V0 + V2*power(cos(w),2) + V4*power(cos(w),4) + V6*power(cos(w),6))
) as CAComputed5
Cross Apply
Select
Rf = k0*a/sqrt((1 - power(e,2)*power(sin([of]),2))),
tf = tan([of]),
nf = ePrime*cos([of])
) as CAComputed6
Cross Apply
Select
Q = EPrime2/Rf,
B2 = -0.5 * tf * (1 + POWER(nf,2)),
B4 = -1/12*(5 + 3 * POWER(tf,2) +POWER(nf,2) * (1-9 * POWER(tf,2)) - 4 * POWER(nf,4)),
B6 = 1/360*(61 + 90*POWER(tf,2) + 45*POWER(tf,4) + POWER(nf,2)*(46 - 252*POWER(tf,2) - 90*POWER(tf,4)))
) as CAComputed7
Cross Apply
Select
Latitude = ([of] + B2*POWER(Q,2)*(1 + POWER(Q,2)*(B4 + B6*POWER(Q,2))))*180/(PI()),
B3 = -1/6*(1 + 2*POWER(tf,2) + POWER(nf,2)),
B5 = 1/120*(5 + 28*POWER(tf,2) + 24*POWER(tf,4) + POWER(nf,2)*(6 + 8*POWER(tf,2))),
B7 = -1/5040*(61 + 662*POWER(tf,2) + 1320*POWER(tf,4) + 720*POWER(tf,6))
) as CAComputed8
Cross Apply
Select
L = Q*(1 + POWER(Q,2)*(B3 + POWER(Q,2)*(B5 + B7*POWER(Q,2))))
) as CAComputed9
Cross Apply
Select
Longitude = (L0 - (L/cos([of]))*180/(PI()))*-1
) as CAComputedLatLong
Notice that each subsequent CROSS APPLY depends on a "working value" column being defined in some previous cross apply, or the working query. There are a few other options, such as leaving off the very last Cross Apply, and computing Longitude as part
of the main query at the beginning, but it works either way.
EDIT: P.S. - By the way, this query is based on the formula in the original poster's query. My formula matches that formula, and I bet it's right (as far as the lat/long conversion), but it could be the formula for Soylent Green, and I wouldn't know any
better... :-)
Maybe you are looking for
-
Hi All, I'm using BAPI_REQUISITION_CREATE to create the PR . The PR is created successfully with service lines. The service lines for PR item has to be assigned to different account assignment. My problem is that account assignment is not getting ass
-
How to connect DAQ with ARM9?
please help me to connect DAQ with ARM9. Solved! Go to Solution.
-
How to set username and password when using Proxy class for SOCKS5?
Hi all, I use the proxy class for SOCKS5, so need to set username and password, I don't find where can I set the value. whether the API support it. Thanks in advance!
-
When using Firefox 3.0.8 - as the site starts up, the music plays a couple of notes of song 1, stops and then restarts song 1; giving a "skipping" effect. When using IE 7.0.5730.13- as the site starts up, the music plays a couple of notes of song 1,
-
Solaris ufs and filesystemio_options with setall
I have a quick question about direct i/o and the filesystemio_options parameter, in particular on ufs and Solaris. My understanding is that if we set this to setall (or directio), Oracle will, at its discretion, use direct i/o for file access. Howeve