我正在试图确定我表中一行中的一个字段(已批准)是否等于同一表的另一行中的已批准字段。每个CommonId总是只有两条记录。我需要一个标量返回值为1,表示两个已批准的字段是相等的,或者一个0表示两个已批准的字段是不相等的。显然,我不明白我需要什么查询。
这是我的桌子结构的表示法。
RecordId int
CommonId int
Approved bit在下面的两个记录中,我希望得到一个0返回,表示批准的字段不相等。
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我试着用一个组来看看我是否能得到一个行,但这也不起作用。
SELECT Approved
FROM MyTable A
INNER JOIN MyTable B ON A.Approved = B.Approved
WHERE A.CommonId = 5
GROUP BY B.CommonId有人能告诉我正确的查询来得到我想要的吗?谢谢。
发布于 2014-08-02 02:01:11
也许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 (您的问题没有提到这是一种可能性)。
发布于 2014-08-02 02:12:34
如果我明白你想要的是什么
SELECT
CASE
WHEN (A.Approved = B.Approved) THEN 1
ELSE 0
END
FROM MyTable A,
MyTable B
WHERE A.commonId = B.commonIdhttps://stackoverflow.com/questions/25090827
复制相似问题