Нов въпрос за SQL...

7 отговора 14 прегледа
#1

Нов въпрос за SQL...

Съжелявам , че ви досаждам отново с този SQL , но наистина съм в трудно положение . А единснтвеният ми източник на информация е Help-a, а там няма много подробности. Значи , искам да доуточня предходния си въпрос : проблемът ми е , че в зависимост от резултата на логическите условия(а те са няколко в алгоритъма ), заявката за данни трябва да се разклонява в различни насоки . По-конкретно : Има 2 полета , които играят ролята на флагове /не са булеви/, но могат да приемат само три стойности .Трябва да се проверят стойностите на полетата , ив зависимост от тях , заявката да извлече необходимите данни . Идеята ми е , може ли да се постави в израза IF ( Test,Expr1,Expr2 ), на мястото на Expr1 и Expr2 ,отделни заявки ?
Отговор
в отговор на ??? #2

Нов въпрос за 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)
Отговор
в отговор на ??? #3

абе за ква среда пишеш?!

гледам ти втори въпрос и почвам да се чудя... за Access ли става въпрос, за SQL Server ли, за Oracle ли, MySQL? кажи, щото за всяка среда решението е различно... има и почти еднакви, обаче скоростта може да се окаже важна.
Отговор
в отговор на ??? #4

абе за ква среда пишеш?!

Става въпрос за 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(.....
Отговор
в отговор на ??? #5

охх, набутал съм се

където не ми е работата, извинявай, нищо не отбирам от Paradox - но забележи, грешката е 'Invalid use of KEYWORD If' - т.е., разбира че If е keyword, виж нещо по-особено по синтаксиса... успех!
Отговор
в отговор на ??? #6

Ne stava i s IIF(..

Въртях , суках но не става , а нямам достатъчно време . Tръгвам s TTable.....
Отговор
в отговор на ??? #7

Ne stava i s IIF(..

PARADOX не поддържа SQL. Заявките, които пишеш се транслират от BDE до BDE API функции. Затова поддържа само ограничени заявки. По-добра производителност ще постигнеш ако работиш директно с BDE API функциите или с класовете, които ги капсулират. Погледни хелпа за IDAPI - Paradox е особена база данни и доста неща се поддържат изчанчено, а други - изобщо не се поддържат :-).
Отговор
в отговор на ??? #8

абе за ква среда пишеш?!

За конкретния случай решението е много просто - направи си три по-прости заявки. С първата определяш стойността на полетата - флагове. После проверяваш условието програмно (на DELPHI), и в зависимост от проверката изпълняваш която ти трябва от другите две заявки.
Отговор