Булеви изрази в списъка за избор на SQL

Искам да създам SQL Select, за да направя единичен тест в MS SQL Server 2005. Основната идея е следната:

select 'Test Name', foo = 'Result'
from bar
where baz = (some criteria)

Идеята е, че ако стойността на колоната "foo" е "Резултат", тогава ще получа стойност true/1; ако не е, ще получа false/0.

За съжаление, T-SQL не харесва израза; задавя се от знака за равенство.

Има ли някакъв начин за оценка на израз в списъка за избор на SQL и получаване на възможен резултат? (Или някакъв друг начин за постигане на модулното тестване, което искам?)


РЕДАКТИРАНЕ: 3 страхотни отговора, всички изградени около CASE. Ще приема feihtthief, тъй като той има най-малко репутация и следователно се нуждае най-много от нея. :-) Благодаря на всички.


person Craig Walker    schedule 30.01.2009    source източник
comment
Никога няма да престане да се учудва колко нелепо е обработката на булевите стойности от TSQL. Страхотен въпрос BTW.   -  person hajikelist    schedule 04.02.2017


Отговори (4)


Използвайте конструкцията case:

select 'Test Name', 
    case when foo = 'Result' then 1 else 0 end 
    from bar where baz = (some criteria)

Вижте също документацията на MSDN Transact-SQL CASE.

person feihtthief    schedule 30.01.2009

Използвайте CASE:

SELECT 'Test Name' [col1],
  CASE foo
    WHEN 'Result' THEN 1
    ELSE 0
  END AS [col2]
FROM bar
WHERE baz = (some criteria)
person John    schedule 30.01.2009
comment
Този е малко по-добър, защото използва оптимизирания „случай“ за равенство, т.е. case foo when 'Result' вместо case when foo = 'Result' - person Mark Sowul; 03.06.2011
comment
@MarkSowul: Можете ли да предоставите информация за това как простият случай е оптимизиран спрямо търсения случай? Винаги съм бил с впечатлението, че един прост случай се оценява или пренаписва от анализатора в търсен случай, но въз основа на това (sqlperformance.com/2014/06/t-sql-queries/) Мисля, че има много случаи от реалния свят, в които вие може да е прав. - person My Other Me; 11.05.2016
comment
Съжалявам, на този етап не си спомням. Смътно си спомням, че съм виждал различни планове за изпълнение в някаква конкретна ситуация. Това също би било преди SQL 2012. В крайна сметка, тъй като „простият случай“ (случай x, когато y) е по-ограничен, оптимизаторът трябва да има по-лесно време с него - person Mark Sowul; 12.05.2016

Можете също да използвате:

select 
    'Test Name', 
    iif(foo = 'Result', 1, 0)
from bar 
where baz = (some criteria)

Знам, че това беше зададено преди време, но се надявам това да помогне на някого там.

person Sebastian G    schedule 12.09.2015
comment
IIF е наличен само от Sql Server 2012 на wards и Sql Azure, доколкото знам (msdn.microsoft.com/en-za/library/hh213574.aspx) - person My Other Me; 11.05.2016
comment
Въпреки че моята ситуация беше малко по-различна, опцията IIF ми даде вградения отговор, от който се нуждаех за моята оценка, която правех. Благодаря! - person MeanJerry; 13.02.2019

person    schedule
comment
Връща: (Без име на колона) | TestResult / TestName | 1 - person ono2012; 24.08.2018