2017-10-05 128 views
0

有没有办法做到这一点?只选择1个数据,但行数仍然是3

来源:

(Select MBLNo,HBLNo from tblCargo where MBLNo = 'M00000001') 

1 | M00000001 | H0003 
2 | M00000001 | H0003 
3 | M00000001 | H0003 

要:

1 | M00000001 | H0003 
2 | NULL  | H0003 
3 | NULL  | H0003 
+0

你的样本数据显示三列,但你的SELECT语句只包含两列。第一列从哪里来? –

+0

您正在使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)产品? Postgres的?甲骨文? “_SQL_”只是一种查询语言,而不是特定数据库产品的名称。 –

+1

改为在表示层中修复它。 – jarlh

回答

1

虽然我觉得这是更好地显示数据的应用程序完成后,就可以在SQL:

select id, 
     case 
     when row_number() over (partition by mblno order by id) = 1 then mblno 
     else null 
     end as mblno 
from tblcargo 
where ... 
+1

OP并没有提到rdbms –

+0

@TimSchmelter:这是标准的ANSI SQL(标签'sql'指的是)和所有[现代DBMS](http://modern-sql.com/)支持窗口函数 –

+0

我没有提到' t知道MySql支持'row_number' –

1

选中此项。

;WITH CTE 
    AS (
    SELECT *, 
      ROW_NUMBER() OVER(PARTITION BY MBLNO ORDER BY MBLNo) rno 
    FROM temp) 
    SELECT CASE 
       WHEN rno = 1 
       THEN MBLNo 
       ELSE NULL 
      END AS MBLNO, 
      HBLNo 
    FROM CTE; 

所需的输出:

MBLNo  HBLNo 
M00000001 H0003 
NULL  H0003 
NULL  H0003 
相关问题