サインアップ

ログイン

パスワードをお忘れですか

パスワードを忘れましたか? メールアドレスを入力してください。 リンクを受け取り、メールで新しいパスワードを作成します。

質問するにはログインする必要があります

テスト

WITH T0 as (
WITH T0 as (
SELECT 
    "貝桝" as name,
    "A" as TEL1,
    "B" as TEL2,
    "C" as TEL3

UNION ALL 

SELECT 
    "貝桝" as name,
    "B" as TEL1,
    null as TEL2,
    null as TEL3

-- UNION ALL 

-- SELECT 
--     "貝桝" as name,
--     "B" as TEL1,
--     "L" as TEL2,
--     "N"  as TEL3

-- UNION ALL 

-- SELECT 
--     "貝桝" as name,
--     "D" as TEL1,
--     "K" as TEL2,
--     null  as TEL3

-- UNION ALL 

-- SELECT 
--     "貝桝" as name,
--     "A" as TEL1,
--     "D" as TEL2,
--     "F" as TEL3

-- UNION ALL 

-- SELECT 
--     "貝桝" as name,
--     "K" as TEL1,
--     null as TEL2,
--     null as TEL3

-- UNION ALL 

-- SELECT 
--     "貝桝" as name,
--     "G" as TEL1,
--     null as TEL2,
--     null as TEL3
),
T1 as (
SELECT 
    *,
    ROW_NUMBER() OVER (PARTITION BY name order by tel1,tel2,tel3) as KK
FROM T0
),

T2 as (
SELECT 
    T1.*,    
    T01.name as T01_name,
    T01.TEL1 as T01_TEL1,
    T01.TEL2 as T01_TEL2,
    T01.TEL3 as T01_TEL3,
    T01.KK as T01_KK,
    
FROM T1,T1 as T01
where T1.name = T01.name and T1.KK != T01.KK
      and (T01.TEL1 IN (T1.TEL1,T1.TEL2,T1.TEL3) )
)

,FN AS (
SELECT 
    name,
    TEL1,
    STRING_AGG(CONCAT(IFNULL(TEL2,"@"),",",IFNULL(TEL3,"@"),",",IFNULL(T01_TEL1,"@"),",",IFNULL(T01_TEL2,"@"),",",IFNULL(T01_TEL3,"@"))) as GG,
    IFNULL(LENGTH(REPLACE(STRING_AGG(CONCAT(IFNULL(TEL2,"@"),",",IFNULL(TEL3,"@"),",",IFNULL(T01_TEL1,"@"),",",IFNULL(T01_TEL2,"@"),",",IFNULL(T01_TEL3,"@"))),"@","")),0) as FF_LN,
    ROW_NUMBER() OVER (PARTITION BY name order by TEL1, STRING_AGG(CONCAT(IFNULL(TEL2,"@"),",",IFNULL(TEL3,"@"),",",IFNULL(T01_TEL1,"@"),",",IFNULL(T01_TEL2,"@"),",",IFNULL(T01_TEL3,"@"))) ) as K
FROM T2    
GROUP BY 1,2)

,without as (--除外
SELECT 
    FN.name,
    FN1.K
FROM FN
LEFT JOIN FN as FN1
ON FN.name = FN1.name 
    AND FN.K != FN1.K
    AND FN.FF_LN > FN1.FF_LN
WHERE FN1.K is not null
)

,FN2 as (
SELECT 
    FN.name,
    SPLIT(CONCAT(TEL1,",",GG),",") as GG1,
    ROW_NUMBER() OVER (PARTITION BY FN.name order by CONCAT(TEL1,",",GG)) as K
FROM FN 
LEFT JOIN without 
ON FN.name = without.name
and FN.K = without.K
WHERE without.name is null)

,FN3 as (
SELECT 
    DISTINCT
    name,
    v,
    K
FROM FN2
, UNNEST(GG1) AS v)

SELECT * FROM FN3 WHERE v != "@"

コメントを残す