`我有事实表,比如说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"
。
请告诉我。
感谢您阅读我的要求。
答案 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
) ;