假设我有一个(虚构的)表顺序,其列如下:
OrderId: string
供应商:字符串
频道:字符串
我想要一个查询,统计每个渠道的不同供应商的数量,以及总体上的数量。查询应该只考虑最少N个不同供应商的渠道
create table #Order
(OrderId varchar(10),
Supplier varchar(10),
Channel varchar(10)
)
INSERT INTO #Order(OrderID,Supplier,Channel)
VALUES
('1','Supp 1','Paper')
,('2','Supp 2','Paper')
,('3','Supp 3','Paper')
,('6','Supp 4','Inter')
,('7','Supp 5','Inter')
,('13','Supp 1','aa')
,('14','Supp 2','aa')
,('15','Supp 3','aa')
,('55','Supp 4','aa')
SELECT ISNULL(Channel,'Total Distinct Supp') as Channel, COUNT(DISTINCT Supplier) AS [SupplierCount]
FROM #Order
GROUP BY GROUPING SETS ((Channel), ())
HAVING COUNT(DISTINCT Supplier) > 2
ORDER BY ISNULL(Channel,'Total Distinct Supp');这个查询的问题是,总计将包括来自少于2个供应商的渠道的供应商。
以上查询的结果:
Channel SupplierCount
aa 4
Paper 3
Total Dist 5预期结果:
Channel SupplierCount
aa 4
Paper 3
Total Dist 4我们如何修改上述查询以满足需求?
我在用sql azure..。
发布于 2018-11-19 06:08:53
只是另一种方式,具有相同的输出:
create table #Order
(OrderId varchar(10),
Supplier varchar(10),
Channel varchar(10)
)
INSERT INTO #Order(OrderID,Supplier,Channel)
VALUES('1','Supp1','Paper')
,('2','Supp1','Paper')
,('3','Supp 3','Paper')
,('4','Supp 4','Paper')
,('5','Supp 5','Paper')
,('6','Supp 8','Inter')
,('7','Supp 6','Inter')
,('13','Supp 30','aa')
,('14','Supp 44','aa')
,('15','Supp 7','aa')
,('55','Supp 5','aa')
SELECT ISNULL(O.Channel,'Total Distinct Supp') as Channel
,COUNT(Distinct Supplier) as SupplierCount
FROM #Order AS O
INNER JOIN
(
SELECT Channel
, COUNT(DISTINCT Supplier) AS [SupplierCount]
FROM #Order as O
GROUP BY Channel
HAVING COUNT(Distinct Supplier)>2
)C
ON o.Channel = C.Channel
GROUP BY GROUPING SETS ((O.Channel), ())
ORDER BY ISNULL(O.Channel,'Total Distinct Supp');产出:
Channel SupplierCount
aa 4
Paper 4
Total Dist 7发布于 2018-11-18 03:22:47
您没有提供DDL,所以下面的代码没有测试:也许这就是您想要的?
WITH GroupedSuppliers
AS
(
SELECT Channel, COUNT(DISTINCT Supplier) AS [SupplierCount]
FROM [Order]
GROUP BY Channel
HAVING COUNT(DISTINCT Supplier) > 10
)
SELECT *
FROM GroupedSuppliers
UNION ALL
SELECT NULL,
COUNT(DISTINCT Supplier)
FROM [Order]
WHERE Channel IN (SELECT Channel FROM GroupedSuppliers)
ORDER BY Channel;https://dba.stackexchange.com/questions/222799
复制相似问题