8

これが私の2つのテーブルの例です。

ここに画像の説明を入力してください

問題: 左結合を使用してSQLクエリを作成するにはどうすればよいですか?

これがシナリオです

前に述べたように、2つのテーブル(TABLE1とTABLE2)があり、両方のUserIDを1つのテーブルに結合できるように左結合を使用しようとしました

これがコードです

select * from table1 a left join table2 on a.userid = b.userid

したがって、2つのテーブルが結合されます。

私がする必要があるのはこれです:
ステータスがすべて完了している場合は「完了」
、ステータスに完了と不完全が含まれている場合は「不完全」
、それ以外の場合は「ステータスなし」

このようになります。

ここに画像の説明を入力してください

UserID = 1(table1)には完全および不完全なステータス(table2)が含まれている
ため、 「incomplete」(新しい列) が 表示されます。UserID= 4(table1)にはすべての完全なステータス(table 2)が含まれ ているため、「completed」(new桁)




-----------------------------------

ステータスをINTEGERに変更するとどうなりますか?

ここに画像の説明を入力してください

同じ手順。ありがとう

4

3 に答える 3

12
SELECT  a.*, 
        CASE WHEN b.totalCount = 1 AND b.totalINC = 0 THEN 'Complete'
             WHEN totalCount IS NULL THEN ''
             ELSE 'Incomplete'
        END STatus
FROM    table1 a
        LEFT JOIN
        (
            SELECT  UserID, 
                    COUNT(DISTINCT STATUS) totalCount,
                    SUM(CASE WHEN status = 'Incomplete' THEN 1 ELSE 0 END) totalINC
            FROM table2
            GROUP BY UserID
        ) b ON a.UserID = b.UserID

更新1

変更するのはCASE

SELECT  a.*, 
        CASE WHEN b.totalCount = 1 AND b.totalINC = 0 THEN 'Complete'
             WHEN totalCount IS NULL THEN ''
             ELSE 'Incomplete'
        END STatus
FROM    table1 a
        LEFT JOIN
        (
            SELECT  UserID, 
                    COUNT(DISTINCT STATUS) totalCount,
                    SUM(CASE WHEN status <> 100 THEN 1 ELSE 0 END) totalINC
            FROM table2
            GROUP BY UserID
        ) b ON a.UserID = b.UserID;
于 2013-02-06T15:29:55.623 に答える
4

簡単ですが、注意が必要な解決策:

INCOMPLETEは(dbの場合)COMPLETEよりも大きいため、簡単に実行できます。

SELECT a.UserID, 
  LOWER(COALESCE(MAX(b.status) , 'NO STATUS'))
  FROM table1 a 
 LEFT JOIN table2 b on a.userid = b.userid
 GROUP BY a.UserID

SqlFiddle(Andomarのより優れたソリューションも使用)

于 2013-02-06T15:26:16.500 に答える
3
select  a.UserID
,       case
        when sum(case when b.status = 'Incomplete' then 1 end) > 0 
            then 'Incomplete' 
        when sum(case when b.status = 'Complete' then 1 end) > 0 
            then 'Complete' 
        else 'No Status' 
        end
from    table1 a 
left join 
        table2 b
on      a.userid = b.userid
group by
        a.UserID
于 2013-02-06T15:28:47.290 に答える