簡體   English   中英

在MySQL查詢響應中用Null替換重復值

[英]Replace repetitive values with Null in MySQL query response

我的MySQL Server數據庫中有兩個表,其中有一個公共列:

表格1

+---------------------------------+
| columnA       | columnB         |
+---------------------------------+
|  123          |  lorem          |
|  456          |  ipsum          | 
|  456          |  dolor          |
+---------------------------------+

表2

+---------------------------------+
| columnA       | columnC         |
+---------------------------------+
|  123          |  sit            |
|  123          |  amet           | 
|  123          |  consectetur    | 
|  456          |  adipiscing     |
+---------------------------------+

我想獲取columnBcolumnC所有值,其中columnA123 我正在使用的查詢是:

SELECT Table1.columnB, Table2.columnC
FROM Table1
INNER JOIN Table2 ON Table1.columnA = Table2.columnA
WHERE Table1.columnA = '123';

這是查詢結果

+---------------------------------+
| columnB       | columnC         |
+---------------------------------+
|  lorem        |  sit            |
|  lorem        |  amet           | 
|  lorem        |  consectetur    | 
+---------------------------------+

我正在獲得所需的結果,但是我不希望這些重復的值像本示例中的columnB 有什么方法可以用NULL或空格替換(最后兩個)冗余值lorem 就像是:

+---------------------------------+
| columnB       | columnC         |
+---------------------------------+
|  lorem        |  sit            |
|               |  amet           | 
|               |  consectetur    | 
+---------------------------------+

您可以使用它。 希望它對您有用。

;WITH temp AS
(
    SELECT *,
           Row_number() over(partition by A.columnA order by A.columnC) as [Rn]           
    FROM 
    (
      SELECT Table1.columnA, Table1.columnB, Table2.columnC
      FROM Table1
      INNER JOIN Table2 ON Table1.columnA = Table2.columnA
      WHERE Table1.columnA = '123'
    ) A
)
SELECT 
(CASE WHEN [Rn] = 1 THEN columnB ELSE NULL END) columnB
,columnC
FROM temp

根據田阮的建議。

        SELECT  IF(ctr = 1, columnB, '') columnB ,
                columnC
        FROM    ( SELECT    a.columnB ,
                            b.columnC ,
                            ROW_NUMBER() OVER ( PARTITION BY a.columnA ORDER BY b.columnA ) AS ctr
                  FROM      Table1 A
                            INNER JOIN Table2 B ON b.columnA = a.columnA
                  WHERE     a.columnA = '123'
                ) tbl

結果:

    columnB     columnC
    ----------- ------------
    lorem       sit
                amet
                consectetur

    (3 row(s) affected)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM