根据where子句创建包含列的视图

时间:2014-04-15 17:47:20

标签: sql

在SO的帮助下,我今天一直在学习一些SQL。

我创建了一个这样的视图:

CREATE VIEW  RDMAVWSANDBOX.VwNIM001usersAndDlCount AS
SELECT VwNIMEventFct.NIM_USER_ID, COUNT(VwNIMEventFct.NIM_EVENT_TYPE_ID) AS DownloadCount
FROM RDMAVWSANDBOX.VwNIMEventFct
WHERE NIM_EVENT_TYPE_ID = 884
GROUP BY NIM_USER_ID

这很好。

除了NIM_EVENT_TYPE_ID列有5种变体:880,881,883,884,885

在上面的查询中,我创建了一个计数为884的视图。结果如下:

NIM_USER_ID | DownloadCount

因为884表示下载。

但如果我想创建一个这样的视图:

NIM_USER_ID | DownloadCount(based884) | SomeOtherEventCount(based880) | SomeOtherEventCount1(Bases 883) | Etc

有没有办法在一个视图中创建并创建所有内容?

换句话说,我希望每个NIM_USER_ID的每个实例的计数为880-885

2 个答案:

答案 0 :(得分:1)

    CREATE VIEW  RDMAVWSANDBOX.VwNIM001usersAndDlCount AS
    SELECT VwNIMEventFct.NIM_USER_ID
   ,SUM(CASE WHEN NIM_EVENT_TYPE_ID = 884 then 1 else 0 end) AS DownloadCount
   ,SUM(CASE WHEN NIM_EVENT_TYPE_ID = 885 then 1 else 0 end) AS Something
   ,SUM(CASE WHEN NIM_EVENT_TYPE_ID = 886 then 1 else 0 end) AS Something
   ,SUM(CASE WHEN NIM_EVENT_TYPE_ID = 887 then 1 else 0 end) AS Something
    FROM RDMAVWSANDBOX.VwNIMEventFct
    GROUP BY NIM_USER_ID

这个怎么样?

答案 1 :(得分:1)

也许这就是你想要的?

CREATE VIEW  RDMAVWSANDBOX.VwNIM001usersAndDlCount AS
  SELECT 
     VwNIMEventFct.NIM_USER_ID,
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 880 THEN 1 ELSE 0 END) AS [Count for 880],
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 881 THEN 1 ELSE 0 END) AS [Count for 881],
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 882 THEN 1 ELSE 0 END) AS [Count for 882],
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 883 THEN 1 ELSE 0 END) AS [Count for 883],
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 884 THEN 1 ELSE 0 END) AS [Count for 884],
     SUM(CASE WHEN NIM_EVENT_TYPE_ID = 885 THEN 1 ELSE 0 END) AS [Count for 885]
  FROM RDMAVWSANDBOX.VwNIMEventFct
  GROUP BY NIM_USER_ID

您必须更改列名称和显示的顺序以满足您的需要,但该示例应该为您提供一个想法。