[英]SQL Convert rows into columns
我有以下輸出:
用戶名 | 簡稱 | 數據 |
---|---|---|
測試1 | 公司 | 谷歌 |
測試1 | 類型 | 它 |
測試1 | 同意 | 1 |
測試2 | 公司 | |
測試2 | 類型 | 它 |
測試2 | 同意 | 1 |
測試2 | 通訊 | 1 |
我想制作另一列,其中包含以下內容:如果用戶名具有短名稱“newsletter”並且“newsletter”具有數據“1”則“是”,如果用戶名沒有時事通訊則“否”
所以我想要以下輸出:
用戶名 | 是/否 |
---|---|
測試1 | 不 |
測試2 | 是的 |
我做了以下代碼:
SELECT distinct(if(shortname = 'newsletter' and data = 1, 'Yes', 'No')) as 'Yes/no', username
FROM prefix_user as u
JOIN prefix_user_info_data as uid ON uid.userid = u.id
JOIN prefix_user_info_field as uif ON uid.fieldid = uif.id
但這在每一行都寫出是或否
這是在甲骨文上嗎? 實際上,即使不是,您也可以在下面的查詢中采用這個想法。
select case
when shortname = 'newsletter' and data = '1'
then 'YES'
else 'NO'
end as yes_no
from prefix_user as u
JOIN prefix_user_info_data as uid
ON uid.userid = u.id
JOIN prefix_user_info_field as uif
ON uid.fieldid = uif.id
從您添加的標簽中,我將其視為 MySQL。 在您的 IF 條件中,在 shortname='newsletter' 的情況下,您必須添加一個嵌套的 IF 條件來檢查數據值是否等於 1。
查詢將類似於以下內容,用於檢查是否將根據 IF 條件選擇所有用戶而不是 DISTINCT:
SELECT
IF( shortname = 'newsletter',
IF (
data= 1,
'yes',
'No')
, 'No') AS 'Yes/no',
username,shortname, data
FROM
test1 AS u //Relace your table name here
//add joins with other tables that you requires.
您可以將條件聚合用作
SELECT username,
MAX(CASE
WHEN shortname = 'newsletter' AND data = 1 THEN
'Yes'
ELSE
'No'
END) AS "yes/no"
FROM prefix_user as u
JOIN prefix_user_info_data as uid
ON uid.userid = u.id
JOIN prefix_user_info_field as uif
ON uid.fieldid = uif.id
GROUP BY username
考慮到單詞Yes
的字母順序比No
晚
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.