2017-10-05 6 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

あなたのサンプルデータの3つの列を示しているが、あなたのSELECT文では2つのだけの列が含まれています。最初の列はどこから来たのですか? –

+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

オペレーションはrdbmsに言及していません –

+0

@TimSchmelter:これは標準のANSI SQLです( 'sql'というタグが参照されています)、すべての[Modern DBMS](http://modern-sql.com/)はウィンドウ関数をサポートします –

+0

I didn ' 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 
関連する問題