Need help to write case statement
Hi Guys,
I have dashboard in which its has pprompt called PROPMT1 in that prompt it has three values A,B,C
but iwant the full abbreviation of those values like A=APPLE B=BOY and C=Cindy
and also in the report i have the coloumn is prompted by PROMPT1 which has again A,B,C values that need to be modified as A=APPLE B=BOY and C=Cindy
how can i do it with case statement.
For the prompt, write this in the Show window>SQL Results:
1) CASE WHEN 1=0 THEN char_columnname ELSE 'A = APPLE' END FROM "your subject area" UNION ALL CASE WHEN 1=0 THEN char_columnname ELSE 'B = BOY' END FROM "your subject area" UNION ALL CASE WHEN 1=0 THEN char_columnname ELSE 'C = Cindy' END FROM "your subject area"
2) Save the prompt to a presentation variable, pv_choice
This will give you your three values. Make sure you use a CHAR column, doesnt matter what column, though.
For the report,
1) Create a BINS column on the column that contains the A, B, C values and make the BINS A = APPLE, B = BOY, C = Cindy just like the prompt values.
2) Now put a filter on this BINS column and set it equal to your pv_choice presentation variable.
That's it.
NOTE: Obviously, if you want the prompt values to just say "APPLE," "BOY," and "Cindy," then take off the 'A = ', 'B = ' and 'C = ' appropriately. Same for the BINS in your report.
Edited by: David_T on Jun 8, 2011 10:57 AM
Similar Messages
-
Need help about switch & case statements
Dear friends
I am new student of Java
Our University gave us project to make a program. Here is the program:
a- Write a java program ,so the user can input the monthly salary then compute the net salary of an employee after deducting the tax ,use the following table to calculate the tax .Note use switch statement .
Annual salary Tax
100- 999 0
1000- 1999 5%
2000- 3999 7%
4000- 7000 10%
7000 13%Please help me how could I use switch statement.
All I know about switch statement is that I have use Integers for selection.
Kindly help me. I have only 2 days to submit my assignment.
Thanks in Advance
Edited by: syedejaz on Aug 13, 2008 8:09 AM
Edited by: syedejaz on Aug 13, 2008 8:10 AMHello every body:
I tried to make my first program using if then else but the problem is that no calcuation is happinig
/* TMA01 ITC250, Part-III, a
Program which gets input monthly salary and shows net salary after deducting given tax.
File: netSalary.java
import javax.swing.*;
import java.text.*;
public class netSalary {
public static void main(String[] args) {
int Salary=0,Tax=0,monthlySalary=0;
monthlySalary= Integer.parseInt(JOptionPane.showInputDialog(null, "Enter Monthly Salary:"));
if ((monthlySalary>=100) && (monthlySalary<=999)) {
Tax = (monthlySalary*(0/100));
Salary = (monthlySalary-Tax);
JOptionPane.showMessageDialog(null, "Net Salary is:" +Salary);
} else if ((monthlySalary>=1000) && (monthlySalary<=1999)) {
Tax = (monthlySalary*(5/100));
Salary = (monthlySalary-Tax);
JOptionPane.showMessageDialog(null, "Net Salary is:" +Salary);
} else if (monthlySalary>=2000 && monthlySalary<=3999) {
Tax = (monthlySalary*(7/100));
Salary = (monthlySalary-Tax);
JOptionPane.showMessageDialog(null, "Net Salary is:" +Salary);
} else if (monthlySalary>=4000 && monthlySalary<=7000) {
Tax = (monthlySalary*(10/100));
Salary = (monthlySalary-Tax);
JOptionPane.showMessageDialog(null, "Net Salary is:" +Salary);
} else {
Tax = (monthlySalary*(13/100));
Salary = (monthlySalary-Tax);
JOptionPane.showMessageDialog(null, "Net Salary is:" +Salary);
} The tax is not detuting. please tell me the mistake
Edited by: syedejaz on Aug 13, 2008 2:49 PM -
Need Help With A Case Statement.
Apex 3.2
I currently have a report with the sql
select oid oid,
APEX_ITEM.MD5_CHECKSUM(oid, jobid, gdc, status)||
apex_item.hidden(2,oid)||
apex_item.display_and_save(3,jobid) jobid,
apex_item.display_and_save(4,gdc) gdc,
apex_item.display_and_save(5,bday) bday,
num_rows num_rows,
status current_status,
APEX_ITEM.SELECT_LIST_FROM_LOV(6,status,'WORKLOAD_STATUS_FULL_LIST',null,'YES',null,'-Select-') new_status,
case
when status in ('TO_TABLE','ERROR_TABLE') then 'PREPARED'
when status in ('TO_FILE','ERROR_FILE') then 'IN_TABLE'
when status like '%SEND%' and status <> 'SEND_RENAME_OK' then 'IN_FILE'
when trim(translate(status,'-1234567890',' ')) is null then to_char(jobid)
else status
end status_if_reset
from scp_workload
where jobid = :P28_JOBIDWhat I want to do is, if the result of status_if_reset column
is not in ('PREPARED','EMPTY_FILE','IN_FILE','SEND_RENAME_OK','DEPRICIATED')
then the new_status status column should be the APEX_ITEM.SELECT_LIST_FROM_LOV.
If not it should just be status (normal report column)
Hope I have explained properly
GusYour function had errors but maybe that was copy paste. The way you wrote your code is way to complicated. This should work for you:
CREATE OR REPLACE FUNCTION fn_28_get_status (p_status IN VARCHAR2)
RETURN NUMBER
AS
v_status NUMBER;
BEGIN
IF p_status IN
('TO_TABLE', 'ERROR_TABLE', 'TO_FILE', 'ERROR_FILE',
'SEND_RENAME_OK')
OR p_status LIKE '%SEND%'
THEN
v_status := 1;
ELSE
v_status := 0;
END IF;
RETURN v_status;
END fn_28_get_status;
SELECT OID OID,
apex_item.md5_checksum (OID, jobid, gdc, status)
|| apex_item.hidden (2, OID)
|| apex_item.display_and_save (3, jobid) jobid,
apex_item.display_and_save (4, gdc) gdc,
apex_item.display_and_save (5, bday) bday, num_rows num_rows,
status current_status,
CASE
WHEN fn_28_get_status (status) = 1
THEN apex_item.select_list_from_lov
(9,
status,
'WORKLOAD_STATUS_FULL_LIST',
NULL,
'YES',
NULL,
'-Select-'
ELSE status
END new_status
FROM scp_workload
WHERE jobid = :p28_jobidYou should not expect the others will debug you code. They don't have your objects to test.
Denes Kubicek
http://deneskubicek.blogspot.com/
http://www.apress.com/9781430235125
https://apex.oracle.com/pls/apex/f?p=31517:1
http://www.amazon.de/Oracle-APEX-XE-Praxis/dp/3826655494
------------------------------------------------------------------- -
Need help with this CASE statement
Hi everyone,
I would like to create a CASE that references another view and uses fields in that view to create a new field in a new view.
The fields I am working with are called LEVEL_CD and AVAILABLE_AMT.
In this case I would like to create a field called AVAILABLE_AMT (in my new view) that inserts the AVAILABLE_AMT from the old view into the new field only if the LEVEL_CD = 1. If the LEVEL_CD is anything else but 1 I would like to insert a 0 into my new
AVAILABLE AMOUNT field.
This is what I have so far and it doesn't seem to work:
CASE WHEN old_view.LEVEL_CD = 1 THEN old_view.AVAILABLE_AMT
WHEN old_view.LEVEL_CD <> 1 THEN 0 END AS AVAILABLE_AMT
This just gives me zeroes in every record. Can anybody spot what I am doing wrong?
Thanks!SELECT <columns>,CASE WHEN old_view.LEVEL_CD
=
1
THEN old_view.AVAILABLE_AMT
ELSE 0 END AS AVAILABLE_AMTFROM old_view.PK JOIN new_view.PK WHERE....PS.PK -Primary Key
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence -
I have problem with buying in games , I got the massage that the purchased can not be completed , please contact iTunes support.. I need help for my case please
http://www.apple.com/support/itunes/contact/
-
Need help with the session state value items.
I need help with the session state value items.
Trigger is created (on After delete, insert action) on table A.
When insert in table B at least one row, then trigger update value to 'Y'
in table A.
When delete all rows from a table B,, then trigger update value to 'N'
in table A.
In detail report changes are visible, but the trigger replacement value is not set in session value.
How can I implement this?You'll have to create a process which runs after your database update process that does a query and loads the result into your page item.
For example
SELECT YN_COLUMN
FROM My_TABLE
INTO My_Page_Item
WHERE Key_value = My_Page_Item_Holding_Key_ValueThe DML process will only return key values after updating, such as an ID primary key updated by a sequence in a trigger.
If the value is showing in a report, make sure the report refreshes on reload of the page.
Edited by: Bob37 on Dec 6, 2011 10:36 AM -
Hi,
Can we write CASE statement in Where clause of select statement...
I searched on net, i found that case statement can be written in the having clause..
But how about in the where clause....You could have easily tried it.
sql> with mytab as
2 (select 1 col1, 'one' col2 from dual
3 union all
4 select 2 col1, 'two' col2 from dual
5 )
6 select * from mytab
7 where (case when col1 = 1 then col2
8 else 'dummy' end) = 'one';
1 one -
Need help converting Excel IF statement into CASE WHEN statement for Oracle
Hi,
Hope someone can help I have tried various ways of getting this to work, to no avail!
Bascially I have some figures that are minus figures, and I need to add them together to get a movement figure, but I need to treat the minus figures as minus, if that makes sense, rather than the usual... a minus and a minus makes a plus.
For example:- Budget Figure = -1% and Actual Figure = -68% so the movement needs to be -69%.
The IF statement I have been using in Excel is the following:-
=IF(FO110<0,(FP110-(IF(FO110=0,1,FO110)*-1)),FP110-IF(FO110=0,1,FO110))
Which when using the figures as above = -69%
Cell FO = The Budget Figure
Cell FP = The Actual Figure
However, when I created the CASE statement in Oracle, the figure in the query comes back as -0.67, which is oviously not what I want to happen when both actual and budget are minus figures; however when they are a minus and a plus, it works perfectly fine.
Any help on this would be most appreciated!
Kind regards,
AnnmarieHappy I did'n mess something up :)
Nevertheless, don't show it too much around because
case when budget < 0
then actual - case when budget = 0 /* will never happen */
then 1 /* will never happen */
else budget
end * (-1) /* -budget * (-1) remains only */
else actual - case when budget = 0
then 1
else budget
end
endso at least try the following (if case is more readable as decode for you). Let's hope it works as I don't have a Database at hand
case when budget < 0
then actual + budget
else actual - case when budget = 0
then 1
else budget
end
end Regards
Etbin -
Need some help with a case statement implementation
I am having trouble using a CASE statement to compare values and then display the results. The other issue is that i want to put these results in a separate column somehow.
Heres how the code would look:
SELECT "Task"."Code",
"Stat" = CASE WHEN "Task.Code" = 1 THEN string
....and so on
I wanted to make "Stat" the new column for the results, and string represents the string to be assigned if 1 was the value for code. I keep getting syntax error, any help would be nice.This is a lot easier than you might think.
1) First, move another column of "Code" to your workspace.
2) Click on the fx button and then on the BINS tab.
3) Click on "Add BIN" and with the operand on "is equal to/is in," input 1 and then click "OK."
4) Name this what you had for "string."
Repeat for all the different values you want to rename as another "string" value.
5) Finally, check the "custom heading" checkbox, and rename this column "Stat" as you indicated.
That's it. -
Need help with switch/case
Thanks in advance.
I read the tut on switch statements. My assignment is asking me to do something that is not detailed in that explanation ;
I have a total of 5 case statements, 1-4 and a default statement. The instructions for them are as follows:
Case 1: If the user enters a 1, display a message that informs users they are correct, as any input canbe saved as a String. Enter the break statement.
Case 2: If the user enters a 2, parse the value into tryInt. Display as message that informs the users they are correct. Enter the break statement.
Case 3. If they user enters a 3, parse the value into tryDouble. Display a message tha t informs users they are correct. Enter the break statement.
Case 4: Set done equal to true. Enter code to display a closing message. Enter a break statement.
Case default: throw a new NumberFormatException.;
Here is the code
import java.io.*;
import javax.swing.JOptionPane.*;
public class MyType1
public static void main(String[] args)
//declaring variables
String strChoice, strTryString, strTryInt, strTryDouble;
int choice, tryInt;
double tryDouble;
boolean done = false;
//loop while not done
while (!done)
try
choice = Integer.parseInt(strChoice);
switch(choice)
case 1:
JOptionPane.showMessageDialog(null,"You are correct!");
break;
case 2:
choice = Integer.parseInt(tryInt); JOptionPane.showMessageDialog(null,"You are correct!");
break;
case 3:
choice = Double.parseDouble(tryDouble);
JOptionPane.showMessageDialog(null,"You are correct!");
break;
case 4:
done = true; JOptionPane.showMessageDialog(null,"Goodbye!");
break;
As usual Im doing something wrong. Please help.Thanks for your input. The directions for the assignment tells me to first declare the variables.
Begin a while(!done) loop to repeat as long as teh user does not click the Cancel button.
Inside a try statement, enter code to display an input box with three choices.
Type choice = Integer.parseInt(strChoice); on the next line to parse the value for the choice entered by the user.
(HERE THE SWITCH STATEMENT WITH CAST STATEMENTS)
Close the switch statement with brackets
Create a catch statement.
import java.io.*;
import javax.swing.JOptionPane.*;
public class MyType1
public static void main(String[] args)
//declaring variables
String strChoice, strTryString, strTryInt, strTryDouble;
int choice, tryInt;
double tryDouble;
boolean done = false;
//loop while not done
while (!done)
try
String message = "What is My Type:" + "\n\n1) String\n2)Integer\n3)double\n4)Quit the program\n\n";
choice = Integer.parseInt(strChoice);
//test for valid choice 1, 2, 3, or 4
if (choice<1 || choice>4) throw new NumberFormatException();
else done = true;
switch(choice)
case 1:
JOptionPane.showMessageDialog(null,"You are correct!");
break;
case 2:
choice = Integer.parseInt(tryInt); JOptionPane.showMessageDialog(null,"You are correct!");
break;
case 3:
choice = Double.parseDouble(tryDouble);
JOptionPane.showMessageDialog(null,"You are correct!");
break;
case 4:
done = true; JOptionPane.showMessageDialog(null,"Goodbye!");
break;
catch (NumberFormat Exception e)
JOptionPane.showMessageDialog(null, "Please enter a 1, 2, 3 or 4:", "Error", JOptionPane.INFORMATION_MESSAGE);
}Typing this now, I see I dont have anything in my try statement entering code to display an input box with three choices.
(PS. I know I would write a catch statement for the NumberFormatException, but why would I also write this exception in the case statement also??) -
Need help - I2C write/read with TAOS TCS3414 light sensor using USB-8451
Hello, I'm new to labview and need help setting up a vi that will allow me to communicate with a digital light sensor (TAOS TCS3414) using a USB-8451. I need to use the sensor to measure light from a light source that I designed and built as part of a project im working on. I've tried looking at several labview I2C exampled but find them to be very confusing. I've used an arduino to interface with the sensor successfully but need to use labview and dont understand how to write the program. The actions are simple; I need initialize the sensor with a simple command and then request data from 8 data registers and then read that data. The data will then be used in further calculations. The portion i need help with is writing and reading from the sensor. I've attached the datasheet for the sensor as a guide. I can also provide the arduino code that i use to read data from the sensor if that would help.
Pleae keep in mind that i am completely new to labVIEW. I really do want to learn from this but need quick results so the more help the better. It would greately appreciate any help or explaination.
Attachments:
TCS3414_Datasheet_EN_v1.pdf 1806 KBHi Aaron,
Here you go, this is made with a USB-8452.
When you run the code tick the power en dac enable box on.
Maybe you can help me with my problem, I want to use a fiber to sense light from a led.
Do you use any fiber hardware with the TCS3414?
gr,
Attachments:
TCS3414.vi 63 KB -
Help With A Case Statement With Multiple Variables
I apologize if this is the incorrect Forum for this type of question, but it was the closest one that I could find. I'm pretty new with SQL and am stuck on this issue. I have roughly 26 dates that I need to compare to one another. Each date is tied to a step code. I also have a Stop value that is tied directly to the "max date" of the step codes. So, I need to compare 30 dates against one another to 1st - ID the max date; 2nd - ID if the Stop value is correct; 3rd - if the stop value is incorrect, identify what the correct value would be.
At first, this seemed like it wouldn't be that hard. I wrote a query that found the max date for each step code. Then I realized that multiple step codes could have the same date. So, I tried using this case statement, but I did not get the expected results. Is there a more efficient way of getting what I need? This code seems like it's not necessary and probably the source of my issue.
CASE
WHEN FS25.ACTUAL_COMPLETION_DATE > FS.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS1.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS2.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS3.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS4.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS5.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS6.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS7.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS8.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS9.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS10.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS11.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS12.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS13.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS14.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS15.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS16.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS17.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS18.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS19.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS20.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS21.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS22.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS23.ACTUAL_COMPLETION_DATE AND FS25.ACTUAL_COMPLETION_DATE > FS24.ACTUAL_COMPLETION_DATE AND L.FORECLOSURE_STOP_CODE <= '8' THEN '9'
ELSE 'UH OH'
END AS "CHANGE FC STOP TO"
Any assistance is appreciated!I think Igor pointed out a working solution before.
Applying it at your examples (you missed the operator after STOP_CODE, I assume it =):
CASE
WHEN FS25 = GREATEST(FS25, FS24, FS23) AND STOP_CODE = '9' THEN '9'
ELSE 'UH OH'
END AS 'CHANGE STOP CODE TO'
{code}
Be careful at the second example. You are checking:
{code:sql}
FS25 > FS24 OR FS25 IS NOT NULL AND FS24 IS NULL AND FS25 > FS23
OR
FS25 IS NOT NULL AND FS23 IS NULL AND STOP_CODE = '9'
{code}
Remember that AND has higher priority among operators than OR so if FS25 is greater than FS24 and FS23 the condition will be true even if STOP_CODE is not equal 9.
Regards.
Al -
Please help me with a CASE Statement:
- When ID = 15, 16, 17, 18 then "Bad"
- when ID = 19, then "Average"
- when ID = 21, then "Good"
- else "Null"
Thank you!!Well the 1st thing to do would be to correct my poor spelling... change Delault : to Default :
Don't know why you would get an error stating "The result of selection formula must be a boolean". It's working fine on my machine.
If your ID field is numbers stored text you have a couple different options...
1) Convert the ID to a number...
Select ToNumber({home.noone_ID})
2) Wrap the ID values in double quotes...
Case "15", "16", "17", "18" :
"BAD"
Even if this were your problem... the error should be something other than the boolean thing...
Jason -
Help with multiple case statements
Hello,
I am new to BO. I am on XI 3.0. SQL 2005. In Designer, I am trying to create a measure in a financial universe that would end up being multiple case statements within one select. This is what I tried to do, but it doesn't work with the two case statements. Can I use an ELSE leading into the second CASE WHEN somehow? How can I accomplish this? Sorry for my ignorance!
CASE WHEN dbo.ClientBudgetYear.DateStage1Approved > 01/01/1900 AND dbo.ClientBudgetMonth.Month = 12 THEN dbo.ClientBudgetMonth.Stage1Sales END
CASE WHEN dbo.ClientBudgetYear.DateStage1Approved > 01/01/1900 AND dbo.ClientBudgetMonth.Month = 11 THEN dbo.ClientBudgetMonth.Stage1Sales END
Any Suggestions?
Thanks,
HollyHolly,
I don't know enough about your data or requirement to provide a solution, however, the construct that you post will not work because it causes you to build an object with multiple case statements when only one case statement per object is permitted. From what I see in your code I would be inclined to combine the two statements into one as such:
CASE WHEN dbo.ClientBudgetYear.DateStage1Approved > 01/01/1900 AND dbo.ClientBudgetMonth.Month in (11,12) THEN dbo.ClientBudgetMonth.Stage1Sales else null END
Thanks,
John -
Help with Switch-Case Statement
How do you get this in a switch-case statement or work with it?
if (age < 70) {
JOptionPane.showMessageDialog(null, "People that are below the 70s are nothing special.");
else if (age > 69 && age < 80) {
JOptionPane.showMessageDialog(null, "People that are in their 70s are called septuagenarian.");
else if (age > 79 && age < 90) {
JOptionPane.showMessageDialog(null, "People that are in their 80s are called octogenarian.");
else if (age > 89 && age < 100) {
JOptionPane.showMessageDialog(null, "People that are in their 90s are called nonagenarian.");
else (age > 99 && age < 110) {
JOptionPane.showMessageDialog(null, "People that are in their 100s are called centenarian.");
}Thanks~As per Java Specification, swtich case expects an integer and boolean cannot be used as param for switch.
In your case switch can be used like this.
int index = age /10;
switch(index) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
Your First case
break;
case 7:
your second case
break;
case 8:
third case
break;
case 9:
fourth case
break;
default:
fifth case
break;
Take note of the break statements. Its very important. But I wont prefer in this case. Code looks awkward and is not so meaningful.....
Maybe you are looking for
-
Easy way to add a cross disolve to multiple clips???
There has to be a trick to this? They could not make it this manual that you need to do every one. I have figured out how to copy and paste,,... but... this does not always work? And then you have to do each one if you have 100 clips it takes 100 pas
-
Read from text file multiple times
Hi! Inside my main VI, I read settings from the same text file like 4-5 different places (some inside sub VI's). This is also inside a while-loop that is delayed about 0,5 seconds. The text file contains about 50-100 lines depending on the settings
-
To sign together with signature image
I want to sign conventionally by including my signature image. However, when I choose to configure signature appearance, Adobe Reader XI cannot import graphics in jpg, only choice is pdf and signature image came out truncated! So, is it confirm that,
-
Are there any updated functions or apps that would allow you to save multiple images from a text message to camera roll from iphone? If not, what are the best alternatives these days?
-
Displaying cursor at a specific line
Hi! I'm developing a text editor in AWT as a part of an assignment. Now when the text editor is rendered i want to display the cursor at the end of the last line. Did a lot of searching but couldn't find it. Plz help. Thanks Sutirtha