标签:transpose sql sql-server google-bigquery mysql
我在将BigQuery(15亿行)中的大量数据表从行转换为列时遇到问题.我可以弄清楚如何在硬编码时使用少量数据来完成它,但这个数量很大.表的快照如下所示:
————————–
| CustomerID特征值|
————————–
| 1 A123 3 |
| 1 F213 7 |
| 1 F231 8 |
| 1 B789 9.1 |
| 2 A123 4 |
| 2 U123 4 |
| 2 B789 12 |
| .. .. .. |
| .. .. .. |
| 400000 A123 8 |
| 400000 U123 7 |
| 400000 R231 6 |
————————–
所以基本上大约有400,000个不同的customerID有3000个功能,并不是每个customerID都有相同的功能,所以有些customerID可能有2000个功能,而有些有3000个.我想得到的最终结果表是每行显示一个不同的customerID,并且有3000列显示所有功能.像这样:
CustomerID Feature1 Feature2 … Feature3000
因此,某些单元格可能缺少值.
任何人都知道如何在BigQuery或SQL中执行此操作?
提前致谢.
解决方法:
STEP #1
在下面的查询中,用表的真实名称替换yourTable并执行/运行它
SELECT 'SELECT CustomerID, ' +
GROUP_CONCAT_UNQUOTED(
'MAX(IF(Feature = "' + STRING(Feature) + '", Value, NULL))'
)
+ ' FROM yourTable GROUP BY CustomerID'
FROM (SELECT Feature FROM yourTable GROUP BY Feature)
因此,您将获得一些将在下一步中使用的字符串!
STEP #2
从第1步获取字符串,然后将其作为查询执行
输出是您询问的Pivot
标签:transpose,sql,sql-server,google-bigquery,mysql 来源: https://codeday.me/bug/20190829/1760848.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。