只选择1个数据,但行数仍然是3
问题描述:
有没有办法做到这一点?只选择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
答
虽然我觉得这是更好地显示数据的应用程序完成后,就可以在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' –
答
选中此项。
;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
你的样本数据显示三列,但你的SELECT语句只包含两列。第一列从哪里来? –
您正在使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)产品? Postgres的?甲骨文? “_SQL_”只是一种查询语言,而不是特定数据库产品的名称。 –
改为在表示层中修复它。 – jarlh