Kev*_*vin 0 t-sql sql-server sql-server-2008-r2
我如何将所有2个查询联合起来,但在将所有查询合并之前对每个查询进行排序?我希望在结果按总和([docextprice])desc命令后的每一年获得前20名的结果
这是我现在拥有的一个例子:
SELECT top 20 gm.[partnum]
,p.PartDescription
,sum([docextprice])[docextprice]
,year([invoicedate])year
,'Eco Surfaces' product
FROM dbo.gm gm
JOIN dbo.Part p on gm.partnum = p.PartNum
WHERE gm.company = 'EII' and [invoicedate] BETWEEN '20100809' and '20101231'
and p.ClassID in ('mpe')
GROUP BY year([invoicedate]),gm.[partnum],p.PartDescription
ORDER BY year([invoicedate]),sum([docextprice]) desc
UNION ALL
SELECT top 20 gm.[partnum]
,p.PartDescription
--,gm.[prodcode]
--,p.ClassID
,sum([docextprice])[docextprice]
,year([invoicedate])year
,'Eco Surfaces' product
FROM dbo.gm gm
JOIN dbo.Part p on gm.partnum = p.PartNum
WHERE gm.company = 'EII' and [invoicedate] BETWEEN '20110101' and '20111231'
and p.ClassID in ('mpe')
GROUP BY year([invoicedate]),gm.[partnum],p.PartDescription
ORDER BY year([invoicedate]),sum([docextprice]) desc
Run Code Online (Sandbox Code Playgroud)
显然,这个查询不会因为你不能在连接的两边进行排序.
您可以通过使用公用表表达式来保存结果,然后将它们组合在一起:
WITH cte1
AS ( SELECT TOP 20
gm.[partnum] ,
p.PartDescription ,
SUM([docextprice]) [docextprice] ,
YEAR([invoicedate]) year ,
'Eco Surfaces' product
FROM dbo.gm gm
JOIN dbo.Part p ON gm.partnum = p.PartNum
WHERE gm.company = 'EII'
AND [invoicedate] BETWEEN '20100809' AND '20101231'
AND p.ClassID IN ( 'mpe' )
GROUP BY YEAR([invoicedate]) ,
gm.[partnum] ,
p.PartDescription
ORDER BY YEAR([invoicedate]) ,
SUM([docextprice]) DESC
),
cte2
AS ( SELECT TOP 20
gm.[partnum] ,
p.PartDescription
--,gm.[prodcode]
--,p.ClassID
,
SUM([docextprice]) [docextprice] ,
YEAR([invoicedate]) year ,
'Eco Surfaces' product
FROM dbo.gm gm
JOIN dbo.Part p ON gm.partnum = p.PartNum
WHERE gm.company = 'EII'
AND [invoicedate] BETWEEN '20110101' AND '20111231'
AND p.ClassID IN ( 'mpe' )
GROUP BY YEAR([invoicedate]) ,
gm.[partnum] ,
p.PartDescription
ORDER BY YEAR([invoicedate]) ,
SUM([docextprice]) DESC
)
SELECT *
FROM cte1
UNION ALL
SELECT *
FROM cte2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |