Sql server 2008 SQL小计,分组问题

Sql server 2008 SQL小计,分组问题,sql-server-2008,tsql,Sql Server 2008,Tsql,如果您能提供一些SQL小计方面的指导,我将不胜感激。我正在使用SQLServer2008R2 使用的表格: OrderInvoiceHeader.ProvinceCode OrderInvoiceHeader.InvoiceNumber OrderInvoiceHeader.BillToCustomer OrderInvoiceHeader.InvoiceDate OrderInvoiceHeader.InvoiceAmount OrderInvoiceHeader.GstAmount Orde

如果您能提供一些SQL小计方面的指导,我将不胜感激。我正在使用SQLServer2008R2

使用的表格:

OrderInvoiceHeader.ProvinceCode
OrderInvoiceHeader.InvoiceNumber
OrderInvoiceHeader.BillToCustomer
OrderInvoiceHeader.InvoiceDate
OrderInvoiceHeader.InvoiceAmount
OrderInvoiceHeader.GstAmount
OrderInvoiceHeader.PstAmount

Customer.BillToCustomer
Customer.CustomerName

CanadaProvinces.ProvinceCode
CanadaProvinces.ProvinceName
我必须在查询时显示: 必须显示每个发票号码、省名称、客户名称、发票日期、发票金额、GstAmount和PSTAMUNT。 必须按ProvinceName进行小计,以包括发票金额、GstAmount和PstAmount之和。 必须对所有省份进行小计,以包括发票金额、GstAmount和PstAmount之和


序列必须是ProvinceName、CustomerName、InvoiceNumber。

如我所说-分组集:

select 
    InvoiceNumber   = case grouping(InvoiceNumber) when 1 then '<Total>' else InvoiceNumber end, 
    ProvinceName    = case grouping(ProvinceName) when 1 then '<Total>' else ProvinceName end, 
    CustomerName    = case grouping(CustomerName) when 1 then '<Total>' else CustomerName end, 
    InvoiceDate = case grouping(InvoiceDate) when 1 then '<Total>' else InvoiceDate, end  
    sum(InvoiceAmount), sum(GstAmount), sum(PstAmount)
from [table]
group by 
    grouping sets (
        (ProvinceName, InvoiceNumber, CustomerName, InvoiceDate),
        (ProvinceName),
        ()  -- grand total
    )

您可以使用汇总或多维数据集来实现这一点,但您必须使用分组[column]来过滤掉不需要的聚合。

通常小计和分组在报表层的SQL之外处理。只需确保您有一个适当的order by,这样就可以按顺序排列GROUPS READ about GROUP by GROUP SETS我不太明白的是,我必须在Select中包含InvoiceDate作为示例,因此我被迫将其包含在GROUP by中,当使用with rollup时,它将按InvoiceDate提供额外的行小计。“顾客姓名也是如此。”杰米辛森说。那么你不介意接受回答吧