2017-02-23 1 views
-1

달성하고자하는 작업은 다음과 같습니다. 두 개의 열이있는 테이블이 있습니다 : - u0 및 u1. 두 열의 값이 반복되는 경우가 있는데, u0과 u1에 모두 하나의 값이 표시됩니다. 테이블이 하나 개의 로우가있는 경우SQL :: 중복 값을 일치시키고 쉼표로 구분 된 문자열로 결과를 연결하십시오.

  u0      u1  
1   A       B 
2   B       C 
3   D       B 
4   B       D 
5   F       E 

: U0 = A, U1 = B와 다른 행 U0 = B, U1이 = C가 우리가 있다는 결론을 내릴 수 있고, B 및 C 모두가 동일한 사용자에 속한다. 모든 행에 한 사용자에게 속한 U 항목 목록이 쉼표로 구분 된 문자열로 포함 된 열이있는 표를 만드는 것이 좋습니다.

Desiered 출력 :

select 
    distinct 
    stuff(( 
     select ',' + u0 
     from [db1] 
     where u0 like u1 
     for xml path('') 
),1,1,'')as uids 
from [db1] 

을하지만 BigQuery에이 쿼리 나 오류 얻을 :

Error: Encountered " "FOR" "for "" at line 7, column 9. Was expecting: ")" ...

 IDs 
u0 A,B,C,D 
u1 E,F,G 

내가 작업을 접근 한 방법은 다음과 같이이다

나는 COALESCE도 시도했지만 성공하지 못했습니다.

SELECT uids = COALESCE(u1 + ',','') + u0 
FROM [db1] 
WHERE u0 in u1 

및 다시이 오류 메시지를 받았습니다 :

Error: Encountered " "IN" "in "" at line 3, column 12. Was expecting:

미리 감사드립니다.

+0

테이블 참조가 분명히 기존 BigQuery이므로 부적절한 데이터베이스를 제거했습니다. –

+0

현재 구문 : [String_agg] (https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#string_agg) ... 이전 구문 : [Group_concat] (https : // cloud.google.com/bigquery/docs/reference/legacy-sql#group_concat) – JohnHC

+0

GROUP_CONCAT sql 함수를 사용해야합니다.이 링크를 확인하십시오. http://stackoverflow.com/questions/42418641/split-row-results-to-column/ 42419232 # 42419232 –

답변

1

나는 완전히 질문을 이해한다고 생각하지 않지만, 당신은 단지 u1에있는 별개의 u0 값의 문자열 연결을 얻으려면, 당신은 다음과 같이 수행 할 수 있습니다

#standardSQL 
SELECT 
    STRING_AGG(DISTINCT u0) 
FROM T 
WHERE u0 IN (SELECT u1 FROM T); 

로를 자체 포함 예 :

#standardSQL 
WITH T AS (
    SELECT * 
    FROM UNNEST(ARRAY<STRUCT<u0 STRING, u1 STRING>>[ 
    ('A', 'B'), 
    ('B', 'C'), 
    ('D', 'B'), 
    ('B', 'D'), 
    ('F', 'E') 
    ]) 
) 
SELECT 
    STRING_AGG(DISTINCT u0) 
FROM T 
WHERE u0 IN (SELECT u1 FROM T); 
+0

Elliott에게 답변 해 주셔서 감사합니다. 첫 번째 제안 된 솔루션을 시도했을 때 u0 및 u1 값을 포함하지만 쉼표로 구분 된 문자열이 아닌 하나의 열 테이블을 다시 가져 왔지만 별도의 필드에서 각 관찰을 보았습니다. 두 번째 예제는 300 만 회의 관측치를 가지고 있으므로 확장 가능하지 않습니다. – Glaucon

관련 문제