2017-02-09 74 views
0

我想將兩列連接成一個,並設法做到這一點。但我不希望兩列的回車,而是隻希望兩列之間有空格。連接兩列,只有一個回車

SELECT t1.save_line || t2.save_line as save_line 
FROM (
    SELECT * 
    FROM save_output_table 
    WHERE save_type = 'R' and seq_id = '0' and execution_id = '292' 
) t1 
    JOIN (
     SELECT * 
     FROM save_output_table 
     WHERE save_type = 'R' and seq_id = '0' and execution_id = '286' 
) t2 ON t1.line_id = t2.line_id 

輸出:

+------------+ 
| Save_line | 
+------------+ 
| 18   | 
| 12   | 
|------------| 
| 23   | 
| 22   | 
+------------+ 

預計:

+------------+ 
| Save_line | 
+------------+ 
| 18 12  | 
| 23 22  | 
+------------+ 
+0

你可以添加'save_output_table'的數據?我很確定這個問題不是連接,而是連接。無論如何,你可以使用'CONCAT_WS('',t1.save_line,t2.save_line)' –

+0

問題出在數據中。存儲行結束符有什麼意義?改變數據的加載方式,所以你在SQL中沒有使用CR LF的putz。您隨後會在適當的時候使用printf添加換行符。 –

回答

2

首先,查詢更簡單地寫爲:

SELECT (sov.save_line || sov2.save_line) as save_line 
FROM save_output_table sov JOIN 
    save_output_table sov2 
    on sov.line_id = sov2.line_id 
WHERE sov.save_type = 'R' and sov.seq_id = '0' and sov.execution_id = '292' and 
     sov2.save_type = 'R' and sov2.seq_id = '0' and sov2.execution_id = '286' ; 

然後,您可以替換換行符與一個空間。這可能取決於你的操作系統,但這樣的事情:

SELECT replace(sov.save_line || sov2.save_line0, char(13), ' ') as save_line 

在Windows中,您可能需要更換CR和LF:

SELECT replace(replace(sov.save_line || sov2.save_line0, char(13), ' '), char(10), '') as save_line 
+0

我在窗戶上運行它,並按照預期工作。結果與以前相同。 – SuraJ

+0

@Goutam顯示'sqlite3'命令行shell的實際輸出。 –