2016-06-27 116 views
1

不同的值,我在我的表中的幾個字段,我想他們中的一些結合成一個字符串,使用-作爲分隔符:的毗連帶分隔符

select 
    concat(
     case when a <> 'a' then concat('A = ', a) 
     case when b <> 'b' then concat(' - B = ', b) 
     ... 
     case when z <> 'z' then concat(' - Z = ', z) 
    ) 
; 

現在,如果不包括A,那麼我的結果將從-開始,我不想那樣做。在現實中,我有15個案例,所以我不能再檢查是否A再次插入-。什麼是最簡單的解決方案,以便我的字符串從不以分隔符開始?

我知道我可以檢查它是否與「 - 」開始,但看起來骯髒的解決方案,我...

+0

你能告訴我們一個示例表你想要的輸出一起? –

+0

假設我有一個有26個字段(A - > Z)的表格。所有的都是簡單的VARCHAR(10) 可能的輸出: C = r - F = z - Y = q - Z = n 我意識到我的例子被嚴重挑選,但應該沒關係...... –

+0

是的,數據和你想要的輸出是什麼?我們無法讀懂你的想法。 –

回答

4

如果我沒有理解好你的問題,你應該嘗試一些與concat_ws類似如下代碼(通常concat_ws會跳過從你的CASE語句空值):

SELECT 
    CONCAT_WS(
     ' - ', 
     (CASE a WHEN 1 THEN CONCAT('A = ', a) ELSE null END), 
     (CASE b WHEN 1 THEN CONCAT('B = ', b) ELSE null END), 
     ... 
    ) 

實例下

create table table5 
( id int auto_increment primary key, 
    a int not null, 
    b int not null 
); 
insert table5(a,b) values (0,0),(1,0),(1,1),(0,1),(1,1); 

SELECT 
    id, 
    CONCAT_WS( 
     ' - ', 
     (CASE a WHEN 1 THEN CONCAT('A = ', a) ELSE null END), 
     (CASE b WHEN 1 THEN CONCAT('B = ', b) ELSE null END) 
    ) as xxx 
    from table5; 
+----+---------------+ 
| id | xxx   | 
+----+---------------+ 
| 1 |    | 
| 2 | A = 1   | 
| 3 | A = 1 - B = 1 | 
| 4 | B = 1   | 
| 5 | A = 1 - B = 1 | 
+----+---------------+ 
+0

這正是我正在尋找的。謝謝! –

+0

好的答案Mickaël – Drew

+0

Thx爲例:) –