我试图确定我的表中一行中的一个字段(已批准)是否等于同一表中另一行中的“已批准”字段。每个CommonId总会只有两条记录。我需要标量返回值为1表示两个Approved字段相等或0表示两个Approved字段不相等。显然我不明白我需要什么样的查询。
以下是我的表结构的表示。
RecordId int
CommonId int
Approved bit
记录 在下面的两个记录中,我想返回一个0表示Approved字段不相等。
RecordId = 1
CommonId = 5
Approved = 1
RecordId = 2
CommonId = 5
Approved = 0
在接下来的两条记录中,我希望返回1表示已批准的字段相等。
RecordId = 3
CommonId = 9
Approved = 1
RecordId = 4
CommonId = 9
Approved = 1
这是我尝试过的查询,但我得到两行,并不表示两个字段是否相等。
SELECT A.Approved
FROM MyTable A
INNER JOIN MyTable B ON A.Approved = B.Approved
WHERE A.CommonId = 5
我尝试使用GROUP BY来查看我是否只能获得一行,但这也不起作用。
SELECT Approved
FROM MyTable A
INNER JOIN MyTable B ON A.Approved = B.Approved
WHERE A.CommonId = 5
GROUP BY B.CommonId
有人能告诉我正确的查询以获得我想要的东西吗?谢谢。
答案 0 :(得分:2)
也许group by
会有帮助吗?
select commonId,
(case when max(Approved) = min(Approved) then 1 else 0 end) as IsEqual
from MyTable A
group by commonId;
此公式假设NULL
列中的值不是approved
(您的问题并未将此视为可能)。
答案 1 :(得分:0)
如果我理解你正在寻找什么
SELECT
CASE
WHEN (A.Approved = B.Approved) THEN 1
ELSE 0
END
FROM MyTable A,
MyTable B
WHERE A.commonId = B.commonId