我需要一个SQL查询,用于将列值与同一表中的行进行比较

我需要一个SQL查询,用于将列值与同一表中的行进行比较,sql,Sql,我有一个名为BB_BOATBKG的表格,该表格包含乘客出行详细信息,包括Z_ID、BK_KEY和PAXSUM列,其中: Z_ID = BookingNumber* LegNumber BK_KEY = BookingNumber PAXSUM = Total number passengers travelled in each leg for a particular booking 例如: Z_ID BK_KEY PAXSUM 001234*01 001234

我有一个名为
BB_BOATBKG
的表格,该表格包含乘客出行详细信息,包括
Z_ID
BK_KEY
PAXSUM
列,其中:

Z_ID = BookingNumber* LegNumber
BK_KEY = BookingNumber
PAXSUM = Total number passengers travelled in each leg for a particular booking
例如:

Z_ID         BK_KEY     PAXSUM
001234*01   001234           2
001234*02   001234           3
001287*01   001287           5
001287*02   001287           5
002323*01   002323           7
002323*02   002323           6
我想从
BB_BOATBKG
获得一份所有预订号码的列表,其中同一预订的每个航段的乘客总数
PAXSUM
不同
例如,对于预订编号
A
A*Leg01
可能有2名乘客,
A*Leg02
可能有3名乘客

这有点违反直觉,但您可以在{BK_KEY,PAXSUM}上将表本身联接起来,并仅取出联接结果为空的记录

我认为这样做:

SELECT
    a.BK_KEY
FROM
    BB_BOATBKG a
    LEFT OUTER JOIN BB_BOATBKG b ON a.BK_KEY = b.BK_KEY AND a.PAXSUM = b.PAXSUM
WHERE
    b.Z_ID IS NULL
GROUP BY
    a.BK_KEY
编辑:我想除了这件小事之外,我还遗漏了什么。我想你可以通过一些非常讨厌的子选择来做到,一个洛杉矶:

SELECT
    b.BK_KEY
FROM
    (
        SELECT
            a.BK_KEY,
            Count = COUNT(*)
        FROM
            (
                SELECT
                    a.BK_KEY,
                    a.PAXSUM
                FROM
                    BB_BOATBKG a
                GROUP BY
                    a.BK_KEY,
                    a.PAXSUM
                HAVING
                    COUNT(*) = 1
            ) a
        GROUP BY
            a.BK_KEY
    ) b
    INNER JOIN
    (
        SELECT
            c.BK_KEY,
            Count = COUNT(*)
        FROM
            BB_BOATBKG c
        GROUP BY
            c.BK_KEY
    ) c ON b.BK_KEY = c.BK_KEY AND b.Count = c.Count

根据您的RDBMs,可能有几个可用选项。一个适用于大多数人的解决方案是:

SELECT A.Z_ID, A.BK_KEY, A.PAXSUM
FROM BB_BOATBKG A
JOIN ( 
    SELECT BK_KEY
    FBB_BOATBKGROM BB_BBK_KEY
    GROUP BY BK_KEY
    HAVING COUNT( DISTINCT PAXSUM ) > 1
) B
    ON A.BK_KEY = B.BK_KEY

如果您的DBMS支持OLAP函数,请查看(…)上的
RANK()

您使用的是哪种RDBMS?与我将提供的非常类似,但是,如果一次行程有4个行程,并且计数从2、3、3、2开始,那么正确的答案可能是什么。。。但除此之外,在ISNULL的基础上,完全符合目标。你可以给我看a。与b相比计数。数一数显示差异。是的,你是对的,我完全错过了除琐碎之外的任何案例。我认为第二次尝试正确地处理了所有情况,尽管它不那么聪明和优雅(解决方案的真正衡量标准:),但查询不会返回任何记录,因为我确信表BB_BOATBKG中有大量记录\n如果我在上表BB_BOATBKG中包括BK_键号002325,PAXSUM=1,“eouw0o83hf”提供的上述查询的结果集也将包括只有一个分支的BK_键002325。BK_KEY PAXSUM 001234 2 001234 3 002323 6 002323 7 002325 1无论如何都在那里排除在结果集中,只有一条航段的预订,并且仅包括拥有多条航段的预订,并且在这些航段中,每条航段的乘客数是否存在差异?(PAXSUM中的差异)我在这里预期的结果只有BK_键PAXSUM 001234 2 001234 3 002323 6 002323 7哦,等等,我认为您对此有一个问题:我非常确定您需要排除subselect生成的
BK_键
值,而不是加入其中。子选择确定哪些记录有重复的PAXSUM,而这些记录是拒绝的。我不理解你的评论,OP写道,“我想从BB_BOATBKG获得一份所有预订号码的列表,其中同一预订的每段PAXSUM的乘客总数不同。”。我的建议在哪些方面违反了这一点?如果您有一个条目具有三个独立的分支,并且带有
PAXSUM
s(1,2,2),那么您的解决方案将收回该条目,因为
COUNT(DISTINCT PAXSUM)
确实大于1。约束最终需要更类似于具有COUNT(DISTINCT PAXSUM)=COUNT(*)。(我在当地试过,效果不错)好的,我明白你的意思。但我不确定这是否是假阳性@用户2380064:你能澄清一下吗?