同一列上的多个IF

时间:2015-02-17 09:55:25

标签: google-bigquery

一个愚蠢的问题:

我必须在同一列中将不同的if语句分组。我该怎么办?

if(string =' AAA',' A','其他'),if(string =' BBB',&# 39; B','其他')AS COLUMN 1

谢谢!

3 个答案:

答案 0 :(得分:6)

用例陈述

Select
Case 
When string="AAA" then "A_String"
When string="BBB" then "B_String"
When String in ("CCC","DDD") then "C_OR_D_String"
Else "Unknow_String"
End AS String_Class
From My_Table

希望这有帮助

答案 1 :(得分:2)

查看Query Reference

中的Simulating a Pivot Table部分

使用条件语句将子选择查询的结果组织成行和列。在下面的示例中,搜索大多数修订后的维基百科文章的结果,这些文章以价值' Google'被组织成列,如果它们符合各种criterea,则显示修订计数。

SELECT
  page_title,
  /* Populate these columns as True or False, */
  /*  depending on the condition */
  IF (page_title CONTAINS 'search', 
      INTEGER(total), 0) AS search,
  IF (page_title CONTAINS 'Earth' OR 
      page_title CONTAINS 'Maps', INTEGER(total), 0) AS geo,
FROM
  /* Subselect to return top revised Wikipedia articles */
  /* containing 'Google', followed by additional text. */
  (SELECT
    TOP (title, 5) as page_title,
    COUNT (*) as total
   FROM
     [publicdata:samples.wikipedia]
   WHERE
     REGEXP_MATCH (title, r'^Google.+') AND wp_namespace = 0
  );

返回:

+---------------+--------+------+
|  page_title   | search | geo  |
+---------------+--------+------+
| Google search |   4261 |    0 |
| Google Earth  |      0 | 3874 |
| Google Chrome |      0 |    0 |
| Google Maps   |      0 | 2617 |
| Google bomb   |      0 |    0 |
+---------------+--------+------+

答案 2 :(得分:0)

这不是一个愚蠢的问题...在清理BQ中的数据时,这种情况经常发生,正如您期望的那样。

如果您要使用If语句编写查询,即使其他答案也可以很好地解决您的问题,这将是解决问题的方法:

IF(string = 'AAA','A',(IF(string = 'BBB','B,'other'))) as COLUMN,

在这种情况下,您只是嵌套IF语句,只要条件无效,只要这两个IF语句的“ other”值都相同,它将起作用。