Нов въпрос за SQL...
7 отговора
14 прегледа
Нов въпрос за SQL...
Съжелявам , че ви досаждам отново с този SQL , но наистина съм в трудно положение . А единснтвеният ми източник на информация е Help-a, а там няма много подробности.
Значи , искам да доуточня предходния си въпрос : проблемът ми е , че в зависимост от резултата на логическите условия(а те са няколко в алгоритъма ), заявката за данни трябва да се разклонява в различни насоки .
По-конкретно : Има 2 полета , които играят ролята на флагове /не са булеви/, но могат да приемат само три стойности .Трябва да се проверят стойностите на полетата , ив зависимост от тях , заявката да извлече необходимите данни .
Идеята ми е , може ли да се постави в израза IF ( Test,Expr1,Expr2 ),
на мястото на Expr1 и Expr2 ,отделни заявки ?
Нов въпрос за SQL...
Може. Ето ти извадка от хелпа за MS SQL 7.0:
ELSE (IF...ELSE) (T-SQL)
Imposes conditions on the execution of a Transact-SQL statement. The Transact-SQL statement (sql_statement) following the Boolean_expression is executed if the Boolean_expression evaluates to TRUE. The optional ELSE keyword is an alternate Transact-SQL statement that is executed when Boolean_expression evaluates to FALSE or NULL.
Syntax
IF Boolean_expression{sql_statement | statement_block}
[
ELSE
{sql_statement | statement_block}]
Arguments
Boolean_expression
Is an expression that returns TRUE or FALSE. If the Boolean expression contains a SELECT statement, the SELECT statement must be enclosed in parentheses.
{sql_statement | statement_block}
Is any valid Transact-SQL statement or statement grouping as defined with a statement block. To define a statement block (batch), use the control-of-flow language keywords BEGIN and END. Although all Transact-SQL statements are valid within a BEGIN...END block, certain Transact-SQL statements should not be grouped together within the same batch (statement block). For more information, see Batches and the specific statements being used.
Result Types
Boolean
Examples
This example produces a list of traditional cookbooks priced between $10 and $20 when one or more books meet these conditions. Otherwise, SQL Server prints a message that no books meet the condition and a list of traditional cookbooks that costs less than $10 is produced.
USE pubs
GO
DECLARE @msg varchar(255)
IF (SELECT COUNT(price)
FROM titles
WHERE title_id LIKE 'TC%' AND price BETWEEN 10 AND 20) > 0
BEGIN
SET NOCOUNT ON
SET @msg = 'There are several books that are a good value between $10 and $20. These books are: '
PRINT @msg
SELECT title
FROM titles
WHERE title_id LIKE 'TC%' AND price BETWEEN 10 AND 20
END
ELSE
BEGIN
SET NOCOUNT ON
SET @msg = 'There are no books between $10 and $20. You might consider the following books that are under $10.'
PRINT @msg
SELECT title
FROM titles
WHERE title_id LIKE 'TC%' AND price < 10
END
Here is the result set:
There are several books that are a good value between $10 and $20. These books are:
title
------------------------------------------------------------------------
Fifty Years in Buckingham Palace Kitchens
Sushi, Anyone?
(2 row(s) affected)
абе за ква среда пишеш?!
гледам ти втори въпрос и почвам да се чудя... за Access ли става въпрос, за SQL Server ли, за Oracle ли, MySQL? кажи, щото за всяка среда решението е различно... има и почти еднакви, обаче скоростта може да се окаже важна.
абе за ква среда пишеш?!
Става въпрос за PARADOX в среда Delphi 4. Програмата ще се използва на локално PC. Значи , гледах в Helpa , но никъде не видях констукция IF...THEN ...ELSE за SQL . Предполагам , че примерът от SQL Server не важи за PARADOX/ доколкото знам MS SQL server използва SQL-Transact/, защото ми дава следното съобщение :
Invalid Use of Keyword IF(
Token: Line 1
Отивам да проверя с IIF(.....
охх, набутал съм се
където не ми е работата, извинявай, нищо не отбирам от Paradox - но забележи, грешката е 'Invalid use of KEYWORD If' - т.е., разбира че If е keyword, виж нещо по-особено по синтаксиса... успех!
Ne stava i s IIF(..
Въртях , суках но не става , а нямам достатъчно време .
Tръгвам s TTable.....
Ne stava i s IIF(..
PARADOX не поддържа SQL. Заявките, които пишеш се транслират от BDE до BDE API функции. Затова поддържа само ограничени заявки. По-добра производителност ще постигнеш ако работиш директно с BDE API функциите или с класовете, които ги капсулират.
Погледни хелпа за IDAPI - Paradox е особена база данни и доста неща се поддържат изчанчено, а други - изобщо не се поддържат :-).
абе за ква среда пишеш?!
За конкретния случай решението е много просто - направи си три по-прости заявки.
С първата определяш стойността на полетата - флагове. После проверяваш условието програмно (на DELPHI), и в зависимост от проверката изпълняваш която ти трябва от другите две заявки.