2017-10-05 48 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 
相關問題