2016-08-11 33 views
0

我試圖編寫一個查詢來獲取單行中具有值等於TRUE的幾個列的記錄。我認爲這很容易,但它變成了。MySQL - 如何從具有多個列的表格中獲得一行真或假

擁有一個像這樣的表:

ITEMS COL1 COL2 COL3 COL4 COL5 COL6 
---------------------------------------------------- 
ITEM1 TRUE FALSE FALSE FALSE FALSE FALSE 
ITEM1 FALSE FALSE TRUE FALSE FALSE FALSE 
ITEM1 FALSE FALSE FALSE FALSE FALSE FALSE 
ITEM1 FALSE FALSE FALSE FALSE FALSE TRUE 
ITEM2 FALSE TRUE FALSE FALSE FALSE FALSE 
ITEM2 TRUE FALSE FALSE FALSE FALSE FALSE 
ITEM2 FALSE FALSE FALSE TRUE FALSE FALSE 

我需要這樣的:

ITEMS COL1 COL2 COL3 COL4 COL5 COL6 
---------------------------------------------------- 
ITEM1 TRUE FALSE TRUE FALSE FALSE TRUE 
ITEM2 TRUE TRUE FALSE TRUE FALSE FALSE 

我想在一個表中使用distinctgroup用,像這樣:

Select distinct ITEMS, COL1,COL2,COL3,COL4,COL5,COL6 
FROM TABLE 
WHERE (COL10=’TRUE’ or COL2=’TRUE’ or COL3=’TRUE’ or COL4=’TRUE’ or COL5=’TRUE’ or COL6=’TRUE’) 
GROUP BY ITEMS 

但它並沒有工作,我也試圖加入到同一個表,但結果相同,它在TRUE列中顯示FALSE。

那麼,有人可以提供一個關於如何獲得所需結果的提示嗎? 在此先感謝。

+1

什麼是你希望得到,記錄,其中至少1列是'真'? –

+0

如果按ITEMS分組,則如果ITEMS值相同,則最後一行將覆蓋之前的任何記錄。嘗試刪除「GROUP BY ITEMS」 – SIDU

+0

謝謝,但是如果我刪除了GROUP BY ITEMS,那麼我將爲同一項目獲取多行,並且我需要爲每個ITEM使用一行,TRUE值爲 –

回答

1

MySQL沒有布爾值的聚合函數。然而,這些真的是0(假)和1(真)是僞裝。所以,儘量max()

select items, max(col1), max(col2), max(col3), max(col4), max(col5), max(col6) 
from t 
group by items; 

如果這些被存儲爲字符串,然後 - 巧合 - 以上實際工作,因爲'TRUE'>'FALSE'。你能更有條理:

select items, 
     (case when max(col1 = 'TRUE') > 0 then 'TRUE' else 'FALSE' end) as col1, 
     . . . 
from t 
group by items; 
+0

+1,值得'0 = false'和'1 = true'是MySQL-ism。在標準SQL和大多數其他數據庫中不受支持。 –

+0

看起來他實際上是在他的表格中存儲字符串,而不是布爾值。 – Barmar

+0

感謝您的建議,這完美地工作,也感謝@Bill Karwin關於此的注意事項僅適用於MySQL –

0
select items, min(col1), min(col2), min(col3), min(col4), min(col5), min(col6) 
from t 
group by items; 

Select distinct ITEMS, COL1,COL2,COL3,COL4,COL5,COL6 
FROM TABLE 
WHERE (COL10=’1’ or COL2=’1’ or COL3=’1’ or COL4=’1’ or COL5=’1’ or COL6=’1’ 
GROUP BY ITEMS 

Dont use boolean in the Database 
+0

不應該是'MAX()',因爲''TRUE'>'FALSE''? – Barmar

相關問題