我正在尝试为以下情况找到合适的SQL:
假设我们有两个表:
TABLE A
ID int,
TEXT varchar(200)
TABLE B
ID int,
A_NO int,
B_NO int
两个表上名为“ID”的字段可以连接到链接表。
以下SQL:
SELECT
A.ID,
B.A_NO,
B.B_NO
FROM
A
LEFT JOIN
B
ON A.ID = B.ID
ORDER BY A.ID, B.A_NO, B.B_NO
给出以下结果:
现在,问题。 要求的是在列B_NO中对于列A_NO的MIN值具有值= 1,对于具有相同A_NO值的所有其他行具有值= 0。 预计结果如下:
请注意,在此示例中,我们可以为每个B_NO值找到两行,但可能有两行以上。
我尝试使用CASE重现这些结果,但没有成功。 谢谢你提前帮忙, 布祖基琴。
答案 0 :(得分:2)
使用CTE
和ROW_NUMBER()
尝试此操作; (DEMO)
请注意:我已将myT
视为A
和 {{1}的加入查询表用于演示目的。因此,将 B
替换为 myT
。
A LEFT JOIN B ON A.ID = B.ID
答案 1 :(得分:1)
类似
select ID, a_no, b_no,
case when a_no = min_a_no then b_no else 0 end as new_b_no
from
a left join b on a.id = b.id left join
(Select ID, B_no, min(a_no) as min_a_no
from a left join b on a.id = b.id
group by id, b_no) m on a.id = m.id and b.b_no = m.b_no
ORDER BY A.ID, B.A_NO