bigquery sql-合并一列中与另一个表中的行匹配的多行?

x7rlezfr  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(329)

一般来说,我对大查询和sql还不太熟悉,到目前为止,我已经花了几天时间来研究它了。我在目前的目标上花了好几个小时,似乎找不到实现目标的方法。。。
我想我的concat是对的,但是我无法摆脱重复,因为每个specid有一行。
也不知道一旦我摆脱他们,我如何加入第三个表没有更多的重复?
数据:

t1  
SUMID   Reference   Type    Size
1001    234         Round   120
1002    234         Square  60

t2                      
DETID   SUMID   SPECID  Value
2001    1001    1       TRUE
2002    1001    2       TRUE
2003    1001    3       FALSE
2004    1001    4       TRUE
2005    1001    5       FALSE
2006    1001    6       TRUE
2007    1002    1       FALSE
2008    1002    2       TRUE
2009    1002    3       FALSE
2010    1002    4       TRUE
2011    1002    5       TRUE
2012    1002    6       TRUE

t3          
SPECID  Description     
1       Blue        
2       Red     
3       Green       
4       Orange      
5       Yellow      
6       Purple

输出

t1.Reference    t1.Type  t1.Size  t3.Description
234             Round     120     Blue, Red, Orange, Purple
234             Square     60     Red, Orange, Yellow, Purple

我已经做到了以下几点,但就我的一生而言,我无法摆脱它。


# standardSQL

SELECT 
t1.SUMID, t1.Reference, t1.Type, t1.Size, t2.Description

FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.T2_ID = t2.T2_ID

LEFT JOIN (
SELECT *
FROM ( 
select SUMID, Value,
  CONCAT(
    STRING_AGG(CAST(SPECID AS STRING), ', ') OVER(PARTITION BY SUMID, Value) 
        ) SPEC_IDs

from Table2
)) t2 ON t1.SUMID = t2.SUMID

WHERE t2.Value = TRUE

如果有人能帮我解决这个问题,我真的很感激?我希望一旦我看到它是如何工作的,它会点击。

zd287kbt

zd287kbt1#

如果我理解正确,这是一些 JOIN 具有聚合的s:

SELECT t1.Reference, t1.Type, t1.Size,
       STRING_AGG(t3.Description, ', ')
FROM Table1 t1 LEFT JOIN
     Table2 t2
     ON t2.T2_ID = t1.T2_ID AND 
        t2.Value LEFT JOIN
     Table3 t3
     ON t3.SPECID = t2.SPECID
GROUP BY t1.Reference, t1.Type, t1.Size;

相关问题