0

`我有事实表,比如 main_table,每个表有 30 个操作系统类型和值。表中的值如下所示:

DATE OS_TYPE MEASURE1 MEASURE2
------------------------------


09/01/2013   WI8     
09/01/2013   WI7     
09/01/2013   WXP     
09/01/2013   MAC     
09/01/2013   WI8     
09/01/2013   WI7     
09/01/2013   OTH     
09/01/2013   MAC     
09/01/2013   WI8     
09/01/2013   WI8

我们还有一个维度表,它为上述操作系统类型提供了全名。维度表如下所示:

OS_TYPE OS_NAME
---------------

WI8                 Windows 8
WI7                 Windows 
MAC                 MAC
WXP                 Windows XP
NXP                 OTHER
PS3                 OTHER
POS                 OTHER

..
25 other types

我列出了 main_table 中排名前 10 位的操作系统类型。

SELECT TOP 10 OS_TYPE 
FROM main_table 
ORDER BY measure1 
WHERE EVENT_DT BETWEEN '2013-09-01' AND current_date 

我能够得到这个工作。

现在,我需要一些帮助来更新维度表。

我想要做的是只用全名更新dimension_table前 10名,然后用 name休息。os_typeos_types"other"

希望我很清楚..

请告诉我。

感谢您阅读我的请求。

4

1 回答 1

0

根据您的描述,查询将是这样的:

update dimensiontable
    set name = 'Other'
    where os_type in (SELECT TOP 10 OS_TYPE 
                      FROM main_table 
                      WHERE EVENT_DT BETWEEN '2013-09-01' AND current_date 
                      ORDER BY measure1 
                     ) ;

不能保证这些是 10 个不同OS_TYPE的 s,但您声明此查询返回您想要的内容(即使它的order bybeforewhere子句存在语法错误)。

但是,我可能认为前 10 种操作系统类型是最常见的 10 种。如果是这样:

update dimensiontable
    set name = 'Other'
    where os_type in (SELECT TOP 10 OS_TYPE 
                      FROM main_table 
                      WHERE EVENT_DT BETWEEN '2013-09-01' AND current_date 
                      ORDER BY count(*) desc
                     ) ;
于 2013-09-19T18:42:35.247 回答