0
    CREATE VIEW hd3_b 
AS 
  SELECT CASE 
           WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
           WHEN hd.country_visited = 'India' THEN 'ASIA' 
           WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
           WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
           ELSE hd.country_visited 
         END AS hd.COUNTRY_VISITED 
  FROM   holiday_details hd 
  UNION 
  SELECT hd.holiday_desc, 
         holiday_code 
  FROM   holiday_details hd 

这是我目前拥有的代码,我不断收到 FROM 缺失错误或 MISSING KEYWORD 错误。

任何人都可以在我的语法中看到任何令人眼花缭乱的错误吗?

4

4 回答 4

4

你有几个错误。您似乎正在使用这两个SELECT语句选择不同数量的列。当您使用 a 时UNION,列号必须相等:

CREATE VIEW hd3_b 
AS 
  SELECT CASE 
           WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
           WHEN hd.country_visited = 'India' THEN 'ASIA' 
           WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
           WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
           ELSE hd.country_visited 
         END AS COUNTRY_VISITED,  -- remove the hd alias
         Null as PlaceholderColumn  
  FROM   holiday_details hd 
  UNION 
  SELECT hd.holiday_desc, 
         holiday_code 
  FROM   holiday_details hd 

您在第一个选择中的列名上也有一个表别名。

如果您只想返回一列,那么您将需要使用:

CREATE VIEW hd3_b 
AS 
  SELECT CASE 
           WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
           WHEN hd.country_visited = 'India' THEN 'ASIA' 
           WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
           WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
           ELSE hd.country_visited 
         END AS COUNTRY_VISITED  -- remove the hd alias
  FROM   holiday_details hd 
  UNION 
  SELECT hd.holiday_desc
  FROM   holiday_details hd 

除了在每个查询中具有相同数量的列之外,SELECT您还需要为每列具有相同的数据类型。如果它们不相同,那么您将需要执行CAST任何列以使数据类型相同。

于 2012-11-28T20:25:09.150 回答
2

好吧,我确实看到了一个错误,但没有缺少关键字。您正在尝试使用不同的列数进行UNIONbetween :SELECT

CREATE VIEW hd3_b 
AS 
  SELECT CASE 
           WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
           WHEN hd.country_visited = 'India' THEN 'ASIA' 
           WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
           WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
           ELSE hd.country_visited 
         END AS hd.COUNTRY_VISITED 
  FROM   holiday_details hd 
  UNION 
  SELECT holiday_desc --holiday_code This column shouldn't be here
  FROM   holiday_details 
于 2012-11-28T20:25:35.217 回答
0

尝试

CREATE VIEW hd3_b 
AS 
  SELECT CASE 
           WHEN hd.country_visited = 'USA' THEN 'AMERICA' 
           WHEN hd.country_visited = 'India' THEN 'ASIA' 
           WHEN hd.country_visited = 'CHINA' THEN 'ASIA' 
           WHEN hd.country_visited = 'SPAIN' THEN 'EUROPE' 
           ELSE hd.country_visited 
         END AS COUNTRY_VISITED 
  FROM   holiday_details hd 
  UNION 
  SELECT hd.holiday_desc, 
         hd.holiday_code 
  FROM   holiday_details hd 

你不需要高清。在这条线上

以 COUNTRY_VISITED 结束

由于 COUNTRY_VISITED 是别名,因此您不需要在其前面加上表别名

于 2012-11-28T20:24:36.503 回答
0

我不认为你真的想要 UNION - 在这两种情况下你似乎都是从 holiday_details 表中选择的。如果您希望 country_visited 与相关的 holiday_desc 和 holiday_code 一起成为一列,请尝试以下操作:

CREATE VIEW hd3_b 
AS 
  SELECT CASE 
           WHEN country_visited = 'USA' THEN 'AMERICA' 
           WHEN country_visited = 'India' THEN 'ASIA' 
           WHEN country_visited = 'CHINA' THEN 'ASIA' 
           WHEN country_visited = 'SPAIN' THEN 'EUROPE' 
           ELSE country_visited 
         END AS COUNTRY_VISITED, 
  holiday_desc, 
  holiday_code 
  FROM   holiday_details

此语法应适用于 T-SQL。自从我使用 Oracle 来确定那里的语法是否正确以来已经太久了。

于 2012-11-28T21:14:08.963 回答