更新具有顶部维度值的表列行,并将其作为其他值

时间:2013-09-18 22:50:05

标签: sql

`我有事实表,比如说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

我们还有一个维度表,它给出了上述操作系统类型的全名。 dimension_table看起来像下面的东西:

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名os_type使用全名,其余os_types名称为"other"

希望我很清楚......

请告诉我。

感谢您阅读我的要求。

1 个答案:

答案 0 :(得分: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,但您声明此查询会返回您想要的内容(即使它在order by之前的where语法错误}子句)。

但是,我可能会认为前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
                     ) ;