在特定情况下使用CASE - 如何操作

时间:2013-02-11 20:34:44

标签: sql sql-server-2008

我正在尝试为以下情况找到合适的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

给出以下结果:

enter image description here

现在,问题。 要求的是在列B_NO中对于列A_NO的MIN值具有值= 1,对于具有相同A_NO值的所有其他行具有值= 0。 预计结果如下:

enter image description here

请注意,在此示例中,我们可以为每个B_NO值找到两行,但可能有两行以上。

我尝试使用CASE重现这些结果,但没有成功。 谢谢你提前帮忙, 布祖基琴。

2 个答案:

答案 0 :(得分:2)

使用CTEROW_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