Microsoft SQL Server 2012を使用していますが、この一見単純そうなクエリを実行したいと思います。
SELECT
FirstEvent.id AS firstEventID,
SecondEvent.id AS secondEventID,
DATEDIFF(second, FirstEvent.WndFGEnd, SecondEvent.WndFGStart) AS gap,
FirstEvent.TitleID = SecondEvent.TitleID AS titlesSameCheck
FROM VibeFGEvents AS FirstEvent
RIGHT OUTER JOIN VibeFGEvents AS SecondEvent
ON
FirstEvent.intervalMode = SecondEvent.intervalMode
AND FirstEvent.id = SecondEvent.id - 1
AND FirstEvent.logID = SecondEvent.logID
ただし、SELECT
句のFirstEvent.TitleID = SecondEvent.TitleID AS titlesSameCheck
の構文は正しくありません。ただし、 SELECT句(Transact-SQL)のドキュメント には、次の構文が含まれています。
SELECT [ ALL | DISTINCT ]
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
<select_list>
<select_list> ::=
{
*
| { table_name | view_name | table_alias }.*
| {
[ { table_name | view_name | table_alias }. ]
{ column_name | $IDENTITY | $ROWGUID }
| udt_column_name [ { . | :: } { { property_name | field_name }
| method_name ( argument [ ,...n] ) } ]
| expression
[ [ AS ] column_alias ]
}
| column_alias = expression
} [ ,...n ]
これは、select句で式が有効であることを意味し、実際の例には1 + 2
などが含まれます。 式のドキュメントを見る :
{ constant | scalar_function | [ table_name. ] column | variable
| ( expression ) | ( scalar_subquery )
| { unary_operator } expression
| expression { binary_operator } expression
| ranking_windowed_function | aggregate_windowed_function
}
ブール値の等価性チェックは有効な式であり、確かに the =(Equals)(Transact-SQL)ドキュメント に示されている式の例には次のものが含まれます。
SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE GroupName = 'Manufacturing'
ただし、WHERE
句ではなく、SELECT
句で使用します。 SELECT
句の式を代入として誤って解釈されているため、等号演算子=
を使用して式を比較できないようです。
SELECT
句にFirstEvent.TitleID = SecondEvent.TitleID AS titlesSameCheck
に相当するブール型の等価列比較を含めるにはどうすればよいですか?
このような:
case when FirstEvent.TitleID = SecondEvent.TitleID then 1 else 0 end as titlesSameCheck
条件式(case、where、havingなど)を除いて、ブール型を直接使用することはできません。
あなたの問題を解決する最良の方法は、次のようなことをすることです
select case when x = y then 'true' else 'false' end
bit
タイプは、おそらくブール値に最も近いものです。
select CAST(case when x = y then 1 else 0 end as bit)
もちろん、あなたが求めているものを最もよく表す2つの値のいずれかを使用してください。
2つの既存の回答が述べているように、ブール値を列値として返すことはできません。これは 比較演算子セクション に記載されています:
他のSQL Serverデータ型とは異なり、ブールデータ型はテーブルの列または変数のデータ型として指定できず、結果セットで返すこともできません。
その制限がある場合、CASE
を使用して値を表示可能なものに変換するのが最善の方法です。