我想创建一个查询,以显示通过连接3台顶部24观看次数最多的网页。
但是,我无法得到它的工作。无论是它与使用UNION
,JOIN
或编写的函数/脚本的一部分,一般的问题。
该表是:
+---------------+
| dbo_Good_URLs |
+---------------+
| Url |
| HTTPAlias |
| PortalID |
| page_title |
+---------------+
+-----------------+
| dbo_vw_GoodURLs |
+-----------------+
| URL |
| PortalID |
| HTTPAlias |
| Title |
+-----------------+
+-----------------------+
| dbo_analytics_history |
+-----------------------+
| URL |
| PortalId |
| HTTPAlias |
| Page_Title |
| Report_Month |
| Report_Year |
| Pageviews |
| Unique_Pageviews |
| Entrances |
| Total_Time_on_Page |
| Bounces |
| Exits |
| Avg_Time_on_Page |
| Bounce_Rate |
| Exit_Rate |
+-----------------------+
我试图使用IIF(Is Null(**)
而且我通过看向脚本本身明白为什么UNION
和JOIN
似乎不工作,我似乎无法弄清楚。
我整个星期都在玩弄这一点,它只是没有向我涌来。
SELECT TOP 24 dbo_Good_URLs.Url, Nz(dbo_analytics_history.Pageviews, 0) AS Total_Pageviews,
Nz(dbo_analytics_history.Pageviews, 0) AS Month1
FROM (SELECT Url FROM dbo_Good_URLs WHERE HTTPAlias IN ('x.org', 'ab.x.org'))
UNION
SELECT Url FROM dbo_vw_GoodURLs WHERE dbo_Good_URLs.HTTPAlias IN ('x.org', 'ab.x.org')
LEFT OUTER JOIN dbo_analytics_history
ON dbo_Good_URLs.Url = dbo_analytics_history.URL AND dbo_analytics_history.HTTPAlias IN ('x.org', 'ab.x.org') AND dbo_analytics_history.Report_Month = 10
GROUP BY dbo_Good_URLs.Url, dbo_analytics_history.Pageviews
ORDER BY Nz(dbo_analytics_history.Pageviews, 0) DESC;
我正在寻找的结果是,它显示前24页十月份看(即10个月)。
我会大胆地猜测,你实际上是在寻找类似如下:
select top 24 q.url, nz(a.pageviews, 0) as Total_Pageviews, nz(a.pageviews, 0) as Month1
from
(
select dbo_good_urls.url from dbo_good_urls
where dbo_good_urls.httpalias in ('x.org', 'ab.x.org')
union
select dbo_vw_goodurls.url from dbo_vw_goodurls
where dbo_vw_goodurls.httpalias in ('semcog.org', 'loggedin.semcog.org')
) q
left join dbo_analytics_history a on q.url = a.url
)
where
a.report_month is null or a.report_month = 10
order by
nz(a.pageviews, 0) desc;
在此,目标URL由两个被联合子查询中选择,这种联合的结果却让加入到你的dbo_analytics_history
表上url
场。