SELECT statement comparing 2 fields in a table.
Hi,
Can someone help me out in making a efficient SELECT statement for the follwing requirement.
Say, I want to select all the records from a database table where the field, PLANT is equal to field SALESORG in the table (i.e., when both fields are equal select that record).
Thanks & regards,
Sree
Hello,
I think this is the answer to your question... if you explain a bit more we can formulate a query.
Subquery
Variants:
1. ( select )
2. ALL ( select )
3. ANY ( select )
4. SOME ( select )
Effect
A subquery is a SELECT statement select that occurs within a
SELECT,
OPEN CURSOR,
UPDATE, or
DELETE statement
in the WHERE clause or HAVING clause, to check whether data from database tables or views meets certain criteria.
Subqueries have a restricted syntax in comparison to the normal SELECT statement:
SELECT result FROM source [WHERE where] [GROUP BY fields] [HAVING having].
Variant 1
( select )
If the subquery returns a single value, you can use any relational operator except LIKE and BETWEEN.
Example
Selecting the flights with the most passengers:
DATA: WA TYPE SFLIGHT.
SELECT * FROM SFLIGHT
INTO WA
WHERE SEATSOCC = ( SELECT MAX( SEATSOCC ) FROM SFLIGHT ).
WRITE: / WA-CARRID, WA-CONNID, WA-FLDATE.
ENDSELECT.
Note
If you use a subquery with a relational operator instead of EXISTS, you may only specify one column in the SELECT clause. This can be either a field from the database table or an aggregate expression. Subqueries of this kind are referred to as scalar subqueries.
Variant 2
ALL ( select )
If the subquery returns several lines, each containing one value, you specify that the comparison should apply for all of the values it returns.
Example
This example shows how to use ALL. It displays a list of the customer IDs of the customer (or customers) who have made the most bookings:
DATA: ID TYPE SBOOK-CUSTOMID, CNT TYPE I.
SELECT CUSTOMID COUNT( * ) AS C FROM SBOOK
INTO (ID, CNT)
GROUP BY CUSTOMID
HAVING COUNT( * ) >=
ALL ( SELECT COUNT( * ) FROM SBOOK GROUP BY CUSTOMID ).
WRITE: / ID, CNT.
ENDSELECT.
Variant 3
ANY ( select )
Variant 4
SOME ( select )
If the subquery returns several lines each containing one value, this variant specifies that the comparison should apply to at least one of the values returned. The IN operator is the same as the combination = ANY.
&ABAP_HINT
If you use a subquery with the EXISTS operator, the expression is true if the subquery selects at least one line. You can useuse * in the SELECT clause of subqueries that use EXISTS.
Example
Selecting all flights from Frankfurt to New York between 1.1.1999 and 31.3.1999 that are not yet full:
DATA: WA_SFLIGHT TYPE SFLIGHT.
SELECT * FROM SFLIGHT AS F INTO WA_SFLIGHT
WHERE SEATSOCC < F~SEATSMAX
AND EXISTS ( SELECT * FROM SPFLI
WHERE CARRID = F~CARRID
AND CONNID = F~CONNID
AND CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK' )
AND FLDATE BETWEEN '19990101' AND '19990331'.
WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
WA_SFLIGHT-FLDATE.
ENDSELECT.
Subqueries such as the one in this example, in which the WHERE clause uses fields from the main query, are known as correlated subqueries. Subqueries can be nested, and a given subquery may contain any fields from other, hierarchically-superior subqueries.
In a correlated subquery, the subquery is executed for each line r returned by the main query. In the above example, the main query finds all flights in table SFLIGHT that are not full and that have a date that meets the selection criterion. The statement then performs the subquery for each of the records returned by the main query, using the corresponding values of CARRID and CONNID, to check whether the relevant flight operates between Frankfurt and New York.
Additional help
Subqueries
Similar Messages
-
Select statement for fields in dictionary
Hi Experts,
I am having a select statement as
SELECT ZPRZ1 ZTAG1 FROM V_T052 INTO TABLE NETAMT WHERE ZTERM = V_T052-ZTERM.
The error I am getting is:
V_T052 is not defined in the ABAP dictionary as a table.
When I go to se11 and see for this table.I get V_T052 as a dictionary and not as a table.Wht is the best way you recommend to solve this problem.
Thanks
Kumar..Hi Kumar ,
Is that defined as a directory or as a view, because in my system it is defined as a Maint. view.
and i dont think you can select data from a maintanence view , you will have to use joins to select data from the tables used in the view
Regards
Arun
Message was edited by:
Arun R -
Drop down in the selection for the field from the table
Hi.
i want to put the drop down for the field from the table fo which i dont know the number of entries for the field zregion1 of the table zbwcntry.
please tell me how to use the function module and what could be the line of codes.
the drop down is for the select option on the slection screen of the classical report.
please help .HI,
Check below code..it may help you.
REPORT Zbunu .
TYPES :BEGIN OF STR ,
MATNR TYPE MATNR ,
END OF STR .
DATA : ITAB TYPE TABLE OF STR WITH HEADER LINE,
VAR TYPE MARA-MATNR .
PARAMETERS : S_MATNR TYPE MATNR ,
P_MATNR TYPE MATNR.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR .
SELECT MATNR FROM MARA INTO
CORRESPONDING FIELDS OF TABLE ITAB UP TO 1000 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = ' '
retfield = 'MATNR'
PVALKEY = ' '
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_MATNR'
STEPL = 0
WINDOW_TITLE =
VALUE = ' '
VALUE_ORG = 'S'
MULTIPLE_CHOICE = ' '
DISPLAY = 'X'
CALLBACK_PROGRAM = ' '
CALLBACK_FORM = ' '
tables
value_tab = ITAB
FIELD_TAB =
RETURN_TAB =
DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Regards
Ansumesh -
Select statement not populating the internal table
Hi,
I have a requirement where I have to upload a file from C drive, the fields in this file are VBELN, description & date of creation.
I am able to get this file into the internal table. After this i need to cross check the VBELN against VBRK-VBELN, if present then update a Z-table.... How do I do the cross check part ?...
if not tw_zvatcn[] is initial,
select * from vbrk
into table tw_vbrk
for all entries in tw_zvatcn
where vbeln = tw_zvztcn-vbeln
and vkorg = p_vkorg.
if sy-subrc = 0.
modify ztzb from lw_zvatcn.
endif.
endif.
Internal table tw_vbrk is coming blank, which is not correct because I see the data in db tbl VBRKIs p_vkorg a parameter or select option.
If it is parameter and is blank you will not get data in the table.
In that case make a condition for that field also.
if not tw_zvatcn[] is initial.
if p_vkorg is not initial.
select * from vbrk
into table tw_vbrk
for all entries in tw_zvatcn
where vbeln = tw_zvztcn-vbeln
and vkorg = p_vkorg.
if sy-subrc = 0.
modify ztzb from lw_zvatcn.
endif.
else.
select * from vbrk
into table tw_vbrk
for all entries in tw_zvatcn
where vbeln = tw_zvztcn-vbeln.
if sy-subrc = 0.
modify ztzb from lw_zvatcn.
endif.
endif.
endif. -
Hello,
I have a field in which I am trying to compare two calculated fields, then enter one of two choices. Example
If A1 < B1 then enter A1.value, else enter B1.value
I know very little about scripting and thank goodness I've found most of what I need here on the forum. What is the script I would need to use to accomplish this task?
Thank you!A custom calculate script for the third calculated field could look like:
(function () {
// Get the field values, as numbers
var v1 = +getField("A1").value;
var v2 = +getField("B1").value;
// Set this field's value
if (v1 < v2) {
event.value = v1;
} else {
event.value = v2;
The "if" block could be simplified to just:
// Set this field's value
event.value = v1 < v2 ? v1 : v2 -
Select statement to insert into a table using a loop
hi
create table uploadtab(
itema varchar2(3),
xtype varchar2(1),
salesa number,
margina number,
salesb number,
marginb number,
salesc number,
marginc number);
insert into uploadtab
(itema, xtype, salesa, margina, salesb, marginb, salesc, marginc)
values
('abc', 'a', 100, .40, 300, .10, 450, .25);
create table testinsert(itema varchar2(3),
xtype varchar2(1),
sales number,
margin number);what i want to do is create 3 records based on that one in a loop
so my desired output for testinsert is as follows
abc a 100 .40
abc a 300 .10
abc a 450 .25i don't want to use 3 insert tables if at all possible
any help would be greatly appreciated
thanks in advance
Edited by: DM on Jul 7, 2010 2:22 PMJust a question on this
INSERT INTO testinsert
( itema
, xtype
, sales
, margin
SELECT itema
, xtype
, DECODE
( RN
, 1,salesa
, 2,salesb
, 3,salesc
, DECODE
( RN
, 1,margina
, 2,marginb
, 3,marginc
FROM uploadtab
CROSS JOIN (
SELECT ROWNUM RN
FROM dual
CONNECT BY LEVEL <= 3
;when you put a WHERE before the CROSS JOIN, the error
ORA-00933:SQL command not properly ended. is displayed. -
To retrict to enter selected vaules in fields of Z table??
hi,
i have created a Z table. Now in one field i have to restrict user to enter two values only i.e. either "X" or "y". and when he press F4 on that field he got that two values as a help. How can i do itCreate Data element for that field, Create Domain for that data element. In the Domain There is a tab called Value Range, Click on + Button and add Fix.Val 'X' and again click on + and add 'Y'.
Regards,
Satish -
Inline select statement and SQL optimizatino
Hi everyone,
I am trying to optimze a script but can't get the fulle explainplan in PL/SQL.
The problem is that the select statements in de column defenition is not explained. below are the 2 scripts I want to compare:
SQL1:
Select
z.title
, (select name from members where id =z.id) as name
, z.id
from job z
SQL2
Select
z.title
, d.name
, z.id
from job z
left outer join members d on z.id=d.id
My question is: what is the effect on performance and cost of the 'inline select' statement of name in SQL1
hope to hear form you soon
Harm
Edited by: HALI on 25-nov-2010 1:14In respons to your question below is the output:
I altered the used names, tablenames etc. according to our privacy pollacy.
A far as I can see the inline statement is not traced.
The query with ansi-join:
xplain plan for
select
id as Interne
, mv.ie_id as Act
, 'H_W' as Rl
from testing i
left outer join resutino m on i.hand=m.id
left outer join vert mv on m.voor || case when m.voeg is not null then ' '|| m.voeg end ||' '||m.naam = mv.source and mv.field = 'employee'
explain plan succeeded.
select * from table(dbms_xplan.display)
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 684 | 47880 | 19 |
| 1 | HASH JOIN OUTER | | 684 | 47880 | 19 |
| 2 | HASH JOIN OUTER | | 684 | 22572 | 15 |
| 3 | TABLE ACCESS FULL | testing | 684 | 5472 | 7 |
| 4 | TABLE ACCESS FULL | resutino | 308 | 7700 | 7 |
| 5 | TABLE ACCESS FULL | VERT | 166 | 6142 | 3 |
Note: cpu costing is off, 'PLAN_TABLE' is old version
13 rows selected
The inline select query:
xplain plan for
SELECT
case when (select ie_id from vert xov where xov.field = 'field' and source in
(select m.voor || case when m.voeg is not null then ' '|| m.voegend ||' '||m.naam from resultino m where i.hand= m.id)) is not null then
'X'||(select ie_id from vert xov where xov.field = 'field' and source in
(select m.voor || case when m.voeg is not null then ' '|| m.voegend ||' '||m.naam from resultino m where i.hand= m.id))
else 'X' || (select ie_id from vert xov where xov.source = 'none' and xov.veld = 'employee')
end as Act,
'ADM' as Rol,
i.id as Interne
FROM testing i
explain plan succeeded.
select * from table(dbms_xplan.display)
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 684 | 5472 | 7 |
| 1 | TABLE ACCESS FULL | testing | 684 | 5472 | 7 |
Note: cpu costing is off, 'PLAN_TABLE' is old version
9 rows selected -
Problem in the select statement
I have to select the values of the fields BEZEI depending on tha sales order number vbeln. HOw can i write the select statement what will be the tables associated?
Hi,
tables: vbak.
types: begin of ty_vbak,
vbeln type vbeln,
kokrs type kokrs,
end of ty_vbak,
begin of ty_it_tka01,
kokrs type kokrs,
bezei type bezei,
end of ty_tka01.
data: it_vbak type table of ty_vbak,
wa_vbak type ty_vbak,
it_tka01 type table of ty_tka01,
wa_tka01 type ty_tka01.
Select-options: s_vbeln for vbak-vbeln.
Select VBELN KOKRS from VBAK into table it_VBAK where vbeln in s_vbeln.
if sy-subrc = 0.
select KOKRS BEZEI from TKA01 into it_tka01 for all entries in it_vbak where kokrs = it_vbak-kokrs.
endif.
Loop at it_vbak into wa_vbak.
read table it_tka01 into wa_tka01 with key kokrs = wa_vbak-kokrs.
if sy-subrc = 0.
* Move data to final internal table.
endif.
endloop.
Regards,
Satish -
Select statement error.
Hi all,
I have a select statement which will join 4 tables as shown below. Something is not working right in the select statement and caused the shortdump.
I really cannot figure out where is not right.
Please help.
TYPES:
BEGIN OF t_lips,
matnr TYPE matnr,
lfimg TYPE lfimg,
meins TYPE meins,
vbeln TYPE vbeln_vl,
lfart TYPE lfart,
vstel TYPE vstel,
maktx TYPE maktx,
werks TYPE werks_d,
exnum TYPE exnum,
posnr TYPE posnr_vl,
uecha TYPE uecha,
netwr TYPE netwr,
waerk TYPE waerk,
vgbel TYPE vgbel,
END OF t_lips.
DATA: lt_lips TYPE TABLE OF t_lips.
SELECT lips~matnr lfimg lips~vrkme lips~vbeln lfart
vbap~vstel lips~arktx lips~werks exnum
vbap~netwr vbap~waerk lips~vgbel
lips~posnr lips~uecha
INTO TABLE lt_lips
FROM lips INNER JOIN vttp
ON vttp~vbeln = lips~vbeln
INNER JOIN likp
ON lips~vbeln = likp~vbeln
INNER JOIN VBAP
ON lips~vgbel = vbap~vbeln
WHERE vttp~tknum = ps_vttk-tknum
AND lfimg <> 0.
Error analysis
An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_OPEN_SQL_DB', was not caught
in
procedure "GET_DATA" "(FORM)", nor was it propagated by a RAISING clause.
Since the caller of the procedure could not have anticipated that the
exception would occur, the current program is terminated.
The reason for the exception is:
In a SELECT access, the read file could not be placed in the target
field provided.
Either the conversion is not supported for the type of the target field,
the target field is too small to include the value, or the data does not
have the format required for the target field.Hi,
In the below code, where are you picking up value for LFIMG and LFART. Give the alias/table name for them also.
for ex. lips~lfimg....
SELECT lips~matnr lfimg lips~vrkme lips~vbeln lfart
vbap~vstel lips~arktx lips~werks exnum
vbap~netwr vbap~waerk lips~vgbel
lips~posnr lips~uecha
INTO TABLE lt_lips
FROM lips INNER JOIN vttp
ON vttp~vbeln = lips~vbeln
INNER JOIN likp
ON lips~vbeln = likp~vbeln
INNER JOIN VBAP
ON lips~vgbel = vbap~vbeln
WHERE vttp~tknum = ps_vttk-tknum
AND lfimg 0.
Hope this is useful.
Also selection of records should be same as declared in table lt_lips otherwise use 'INTO CORRESPONDING TABLE LT_LIPS'
Regards,
Saba
Edited by: Saba Sayed on Oct 24, 2008 9:30 AM -
How to fetch negative sign data using select statement
hi gurus,,
i hv to fetch data which is negative in nature using select statement i m using ppdit table and wrbtr field.(it contains both negative and positive data)....wat sud i add with select statement...plz help me..
thnx in advance
Message was edited by:HI,
I think you can use LT or < 0.0 in the WHERE clause to get all the -ve values. Once you get them treat them as negative.
Regards,
Sesh -
Same select statement taking more time
Hello all,
I have two select statements. only the name of table from where it is fetching records are different.
1) select belnr posnr etenr into corresponding fields of table it_cdtemp2
from j_3avasso for all entries in it_cdtemp1
where belnr = it_cdtemp1-vbeln and posnr = it_cdtemp1-posnr .
it_cdtemp1 has 100 entries and j_3avasso has 20000 entries
2) select belnr posnr etenr into corresponding fields of table it_cdtemp2
from j_3avap for all entries in it_cdtemp1
where belnr = it_cdtemp1-vbeln and posnr = it_cdtemp1-posnr .
it_cdtemp1 has 100 entries and j_3avasso has 2000 entries
statement 1 is executing less than a minute where as statement 2 is taking around 15 to 20 minutes
could anyone suggest why.. if so how to minimize run time
Regards
BalaHi,
You can sort the internal table before using FOR ALL ENTRIES BY VBELN and POSNR.
This will save a lot of processing time.
You can also try combing both the selects as one join statement taking both the tables with for all entries addition.
Regards,
Subhashini
Edited by: Subhashini K on Oct 8, 2009 2:58 PM -
Date equality in select statement
Date equality in select statement giving 0 result even table contains record matching to it.please suggest what wrong in this query
1- select *from EOE_POC.PRODUCT_TEST_REPORT where CREATE_DATE = '03-SEP-13'
2 - select *from EOE_POC.PRODUCT_TEST_REPORT where CREATE_DATE >= '03-SEP-13'
above query (2nd one) is giving 2 records.But I am intend to check for equality not greater ..plz enlightenDeekay wrote:
Thanks Bhushan.
select *from EOE_POC.PRODUCT_TEST_REPORT where CREATE_DATE = sysdate
can u plz throw some more light how to check by sysdate?
Assuming CREATE_DATE is -- as it should be -- defined as a DATE (not a varchar) you need to be aware of the fact that DATEs always carry "time" as well. So sysdate is not just "today", it is "this very second". That's why you need to consider the use of TRUNC when you want to compare dates without consideration for the time.
The other thing you need to be aware of is that the literal '03-SEP-13' is not a DATE, but a character string that humans would tend to recognize as representing a date. But to a computer it is still just a character string, fundamentally no different from "here's yer sign!". Therefore, in your usage of comparing the character string '03-SEP-13' to the DATE in CREATE_DATE, oracle has to to an implicit conversion. And to do that implicit conversion it has to know what part of the character string represents the day, the month, the year, and possibly the hour, minute, and second. To do this, it relies on the current setting of NLS_DATE_FORMAT, which may or may not be what you expect. Please see: http://edstevensdba.wordpress.com/2011/04/07/nls_date_format/ - But I want to store my date as ... for a more complete explanation.
And finally, why are you using 2-digit years? Are you actually working in IT and never heard of "the Y2K problem"? Fifteen years ago I and thousands of my colleagues began a two-year grind of busting our butts to make sure systems continued to function correctly when the current date became 01-Jan-2000. Please don't repeat the same mistakes that caused that problem. -
Re: Select statement in the report
Hi Experts,
In my selection-screen contains ernam as a parameter.
If it balnk in the selection-screen,
the select statement is not working.
if it is not blank ,the select statement is working fine.
TABLES: vbak.
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbeln,
knumv TYPE knumv,
END OF ty_vbak.
DATA: v_vkorg TYPE vkorg,
v_vtweg TYPE vtweg,
v_erdat TYPE erdat.
DATA: i_vbak TYPE STANDARD TABLE OF ty_vbak.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_ernam TYPE ernam .
SELECT-OPTIONS: s_vkorg FOR v_vkorg,
s_vtweg FOR v_vtweg,
s_erdat FOR v_erdat.
PARAMETERS: p_kvgr4 TYPE tvv4-kvgr4 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
SELECT vbeln
knumv
FROM vbak
INTO TABLE i_vbak
WHERE erdat IN s_erdat
AND ernam = p_ernam
AND vkorg IN s_vkorg
AND vtweg IN s_vtweg
AND kvgr4 = p_kvgr4.
IF sy-subrc = 0.
WRITE:/ 'HI'.
ENDIF.
Thank's in Advance,
Harsha.report .
TABLES: vbak.
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbeln,
knumv TYPE knumv,
END OF ty_vbak.
DATA: v_vkorg TYPE vkorg,
v_vtweg TYPE vtweg,
v_erdat TYPE erdat.
DATA: i_vbak TYPE STANDARD TABLE OF ty_vbak with header line.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
select-options: s_ernam for vbak-ernam .
SELECT-OPTIONS: s_vkorg FOR v_vkorg,
s_vtweg FOR v_vtweg,
s_erdat FOR v_erdat.
PARAMETERS: p_kvgr4 TYPE tvv4-kvgr4 .
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
SELECT vbeln
knumv
FROM vbak
INTO TABLE i_vbak
WHERE erdat IN s_erdat
AND ernam in s_ernam
AND vkorg IN s_vkorg
AND vtweg IN s_vtweg
AND kvgr4 = p_kvgr4.
IF sy-subrc = 0.
loop at i_vbak.
write:/ i_vbak-vbeln.
endloop.
ENDIF. -
NestedSlects In Select Staments with clubbing of 5 tables with Order Clause
Hi Experts,
I need to execute on Oracle Qurey in Receiver JDBC.
The oracle select Query contains
1. Many Select statments in the parent select statment
2. In side child select stament there are standard SQL fiunctions like.. NVL()
3. Parent select statements is operating on 5 tables...
4. There is big where clause, in side the where clause thare are some more select statments and standard SQL functions
5. It has order by caluse as well.
On total, it was a full pledged SQL Select statment, which has all types and varieties of twists in side it.
Clinet is not agreeing for Stored Procedure. He just want to execute Big Select statment form XI and get back the resltant rows.
It is Sync scenario...
Can this be achived using XI by using Recever JDBC adatper by passing XML SQL statment..
Thanks
SubbuHi Raj,
Thanks you very much for your quick link, and i have gone through all the links/blogs before i posted the question. I heave searched total SDN and I am not sure that XI has this capability.
Do you have any experiences or suggestions on the limitations on XML SQL format, when we are doing to querying such a complex select statement form XI. Because i dont know how much impact
Please share your thoughts.
Thanks
Subrahmanyam
Maybe you are looking for
-
hi folks, I have an text file with records, each record has several field values and there is blank space between them, I need to remove the blank spaces, is there a way that i can do with all records at one stretch? Instead doing it for each record
-
hi all, can anyone tell me how to code for a selection based on selection, that is i have taken suppose material document in the selection screen now when i look for a data in the field it should select based on the moment type displaying a popup
-
Slow display of directory contents.
Anyone else have issues with slow directory content display with Lion? Having the same issue with 3 machines. It is agonizing up to 30 seconds to display the contents of directories. Think this would be a no brainer, but obviously not. This happens w
-
Hi All, I have a KF (day wise split) for a particular month. The requirement is to get the cumulative values for the month. The twist is, the value on the first day is to be added with a constant value and that value has to get cumulated with the val
-
I am making a book using Aperture. During the production process, when I want to replace a picture, or move it to another location in the book, as I click and move it out of the book, it "disappears". (In I Photo 11 it returned to my list of availab