簡體   English   中英

SQL 將行轉換為列

[英]SQL Convert rows into columns

我有以下輸出:

用戶名 簡稱 數據
測試1 公司 谷歌
測試1 類型
測試1 同意 1
測試2 公司 Facebook
測試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.

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