我需要一个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:你能澄清一下吗?