2017-06-14 101 views
1

我知道我的问题似乎很熟悉,但我坚持这一点。我试图按组来计算,并且我有这样的查询:添加分组后计数小计

declare @current varchar(4) 
set @current = left(dbo.fdatetotext(getdate()),4) 

SELECT (Case when GROUPING(NAME) = 0 and 
        GROUPING(CustID) = 1 and 
        GROUPING(Cust_Name) = 1 and 
        GROUPING(Cust_Type) =1 
      then 'Total ' + NAME 
      when GROUPING(NAME) = 1 and 
        GROUPING(CustID) = 1 and 
        GROUPING(Cust_Name) =1 and 
        GROUPING(Cust_Type) =1 
        then 'Total' 
      ELSE NAME 
     END) as Name, 
     CustID, 
     (Case when GROUPING(CNAME) = 0 and 
        GROUPING(CustID) = 1 and 
        GROUPING(Cust_Name) = 1 and 
        GROUPING(Cust_Type) =1 
      then CONVERT(varchar(10), COUNT(Distinct Cust_Name)) 
      when GROUPING(CNAME) = 1 and 
        GROUPING(CustID) = 1 and 
        GROUPING(Cust_Name) = 1 and 
        GROUPING(Cust_Type) =1 
      then CONVERT(varchar(10), COUNT(Distinct Cust_Name)) 
      ELSE Cust_Name 
     END) as Cust_Name, 
     Cust_Type, 
     SUM(Case when LEFT(DATE,6) = @current + '01' then Price/1000000 ELSE 0 END) AS 'Jan', 
     SUM(Case when LEFT(DATE,6) = @current + '02' then Price/1000000 ELSE 0 END) AS 'Feb' 
FROM A JOIN B ON A.id = B.id 
WHERE LEFT(DATE,4) = '2017' 
GROUP BY GROUPING SETS((NAME, CustID, Cust_Name, Cust_Type), 
         (NAME), 
         () 
        ); 

但是我得到的结果是错误的。子总显示最新的数据显示,之后,和我有什么现在的问题是这样的:

table of actual results

而且我想下面的名字后,小计。如何在计数按名称分组后添加小计? (在我的IMG圈子)

如:table of wanted results

+0

附加联合用于总计然后添加一个排序计算值..详细开始可以将您的脚本与详细信息分开,脚本与单个总计以及总计脚本相关联......然后UNION – maSTAShuFu

+0

您使用的是哪种数据库客户端? – SandPiper

+0

@SandPiper sql server bro –

回答

0

尝试这种解决方案,直接通过您的汇总表
使用联盟和集团通过与名排序模式跳跃使用LEFT功能

declare @mytable table ([name] varchar(10),custid int, cust_name varchar(10),custype varchar(5), Jan decimal(8,2), Feb decimal (8,2)) 

    insert into @mytable 
    values 
    ('BoB',1,'AA','X1',1000,2000), 
    ('BoB',2,'BB','X5',200,100), 
    ('Carl',1,'AA','X1',2000,1000), 
    ('Tim',2,'BB','X2',1000,2000), 
    ('Tim',3,'BB','X3',2000,1000), 
    ('Doom',4,'DD','X4',2000,1000) 


declare @mytable table ([name] varchar(10),custid int, cust_name varchar(10),custype varchar(5), Jan decimal(8,2), Feb decimal (8,2)) 

insert into @mytable 
values 
('BoB',1,'AA','X1',1000,2000), 
('BoB',2,'BB','X5',200,100), 
('Bonnie',2,'BB','X5',200,100), 
('Carl',1,'AA','X1',2000,1000), 
('Tim',2,'BB','X2',1000,2000), 
('Tim',3,'BB','X3',2000,1000), 
('Doom',4,'DD','X4',2000,1000) 
select name,custid,cust_name,custype,jan,feb from (
    select *,'1' + name nameord from @mytable 
    union 
    select 'SubTotal ' + name, null,cast(count(1) as varchar(2)),null,sum(jan) sumofJan, sum(feb) sumofFeb, '1' + name + 'xx' from @mytable 
    group by 
    name 
    union 
    select 'Total ', null,null,null,sum(jan) sumofJan, sum(feb) sumofFeb, '3' from @mytable 
) x 
    order by x.nameOrd 

结果

name    custid  cust_name custype jan          feb 
------------------- ----------- ---------- ------- --------------------------------------- --------------------------------------- 
BoB     1   AA   X1  1000.00         2000.00 
BoB     2   BB   X5  200.00         100.00 
SubTotal BoB  NULL  2   NULL 1200.00         2100.00 
Carl    1   AA   X1  2000.00         1000.00 
SubTotal Carl  NULL  1   NULL 2000.00         1000.00 
Doom    4   DD   X4  2000.00         1000.00 
SubTotal Doom  NULL  1   NULL 2000.00         1000.00 
Tim     2   BB   X2  1000.00         2000.00 
Tim     3   BB   X3  2000.00         1000.00 
SubTotal Tim  NULL  2   NULL 3000.00         3000.00 
Total    NULL  NULL  NULL 8200.00         7100.00 

排序STRAT埃及作为字母数字其中具有1 +名称和 小计1个+名称+ XX和总计为3,或者如果你任何数目后1

nameord  name    custid  cust_name custype Jan          Feb 
------------- ------------------- ----------- ---------- ------- --------------------------------------- --------------------------------------- 
1BoB   BoB     1   AA   X1  1000.00         2000.00 
1BoB   BoB     2   BB   X5  200.00         100.00 
1BoBxx  SubTotal BoB  NULL  2   NULL 1200.00         2100.00 
1Carl   Carl    1   AA   X1  2000.00         1000.00 
1Carlxx  SubTotal Carl  NULL  1   NULL 2000.00         1000.00 
1Doom   Doom    4   DD   X4  2000.00         1000.00 
1Doomxx  SubTotal Doom  NULL  1   NULL 2000.00         1000.00 
1Tim   Tim     2   BB   X2  1000.00         2000.00 
1Tim   Tim     3   BB   X3  2000.00         1000.00 
1Timxx  SubTotal Tim  NULL  2   NULL 3000.00         3000.00 
3    Total    NULL  NULL  NULL 8400.00         7200.00 
+0

我编辑了我的问题。而我正在寻找的是按名称分组后的行数... –

+0

请找到更新后的解决方案@MochammadHelmi – maSTAShuFu

+0

让我先尝试,谢谢 –