簡體   English   中英

如何對視圖中的列進行求和/分組/排序

[英]How to sum/group/sort columns in a view

我有兩個表,Author_Dim 和 Author_Fact 如下:

CREATE TABLE Author_Dim
(
TitleAuthor_ID INT IDENTITY(1,1),
Title_ID CHAR(20),
Title VARCHAR(80),
Type_Title CHAR(12),
Author_ID CHAR(20),
Last_Name   VARCHAR(40),
First_Name VARCHAR(20),
Contract_Author BIT,
Author_Order INT,
PRIMARY KEY (TitleAuthor_ID),
);
GO

CREATE TABLE Author_Fact
(
Fact_ID INT IDENTITY(1,1),
TitleAuthor_ID INT,
Author_ID CHAR (20),
Price DEC(10,2),
YTD_Sales INT,
Advance DEC(10,2),
Royalty INT,
Royalty_Perc INT,
Total_Sales DEC(10,2),
Total_Advance DEC(10,2),
Total_Royalty DEC(10,2)
PRIMARY KEY(Fact_ID),
FOREIGN KEY (TitleAuthor_ID) REFERENCES Author_Dim(TitleAuthor_ID),
);
go

我希望創建一個視圖,給出每位作者支付的總版稅,然后將其與首先顯示的最高收入作者進行排序,即它對 Total_Royalty 列求和,按 Author_ID 對其進行分組,然后按降序對 Total_Royalty 進行排序。

我有以下內容,但我不確定如何將 sum/group/sort 函數添加到視圖中:

Create view [Total_Royalty_View] As (
Select Author_Dim.Author_ID, Author_Dim.Last_Name, Author_Dim.First_Name, Author_Fact.Total_Royalty
From Author_Dim
Join Author_Fact
On Author_Fact.TitleAuthor_ID = Author_Dim.TitleAuthor_ID
);
Go

在 SQL 中,它是所有表格。 您從表中獲取 select ,結果又是一個表(由列和行組成)。 您可以存儲 select 語句以供重復使用,這稱為視圖。 您也可以編寫一個臨時視圖(from 子句中的子查詢)。 他們的結果又是表格。

表被認為是無序的數據集。

因此,您不能編寫生成有序行集的視圖。

這是視圖(無序):

create view total_royalty_view as 
select
  a.author_id,
  a.last_name,
  a.first_name,
  coalesce(r.sum_total_royalty, 0) as total_royalty
from author_dim a
left join
(
  select titleauthor_id, sum(total_royalty) as sum_total_royalty
  from author_fact
  group by titleauthor_id
) r on r.titleauthor_id = a.titleauthor_id;

以下是如何從中獲取 select :

select *
from total_royalty_view
order by total_royalty desc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM